aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/executor/execReplication.c5
-rw-r--r--src/test/subscription/t/100_bugs.pl18
2 files changed, 17 insertions, 6 deletions
diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c
index 02b33002136..72ce9fa1a29 100644
--- a/src/backend/executor/execReplication.c
+++ b/src/backend/executor/execReplication.c
@@ -245,9 +245,10 @@ tuples_equal(TupleTableSlot *slot1, TupleTableSlot *slot2)
att = TupleDescAttr(slot1->tts_tupleDescriptor, attrnum);
/*
- * Ignore dropped columns as the publisher doesn't send those
+ * Ignore dropped and generated columns as the publisher doesn't send
+ * those
*/
- if (att->attisdropped)
+ if (att->attisdropped || att->attgenerated)
continue;
/*
diff --git a/src/test/subscription/t/100_bugs.pl b/src/test/subscription/t/100_bugs.pl
index e1a04b1a93e..f5968ffa97a 100644
--- a/src/test/subscription/t/100_bugs.pl
+++ b/src/test/subscription/t/100_bugs.pl
@@ -3,7 +3,7 @@ use strict;
use warnings;
use PostgresNode;
use TestLib;
-use Test::More tests => 6;
+use Test::More tests => 7;
# Bug #15114
@@ -180,8 +180,8 @@ is( $node_subscriber->safe_psql(
$node_publisher->stop('fast');
$node_subscriber->stop('fast');
-# The bug was that when the REPLICA IDENTITY FULL is used with dropped columns,
-# we fail to apply updates and deletes
+# The bug was that when the REPLICA IDENTITY FULL is used with dropped or
+# generated columns, we fail to apply updates and deletes
my $node_publisher_d_cols = get_new_node('node_publisher_d_cols');
$node_publisher_d_cols->init(allows_streaming => 'logical');
$node_publisher_d_cols->start;
@@ -194,14 +194,18 @@ $node_publisher_d_cols->safe_psql(
'postgres', qq(
CREATE TABLE dropped_cols (a int, b_drop int, c int);
ALTER TABLE dropped_cols REPLICA IDENTITY FULL;
- CREATE PUBLICATION pub_dropped_cols FOR TABLE dropped_cols;
+ CREATE TABLE generated_cols (a int, b_gen int GENERATED ALWAYS AS (5 * a) STORED, c int);
+ ALTER TABLE generated_cols REPLICA IDENTITY FULL;
+ CREATE PUBLICATION pub_dropped_cols FOR TABLE dropped_cols, generated_cols;
-- some initial data
INSERT INTO dropped_cols VALUES (1, 1, 1);
+ INSERT INTO generated_cols (a, c) VALUES (1, 1);
));
$node_subscriber_d_cols->safe_psql(
'postgres', qq(
CREATE TABLE dropped_cols (a int, b_drop int, c int);
+ CREATE TABLE generated_cols (a int, b_gen int GENERATED ALWAYS AS (5 * a) STORED, c int);
));
my $publisher_connstr_d_cols =
@@ -224,6 +228,7 @@ $node_subscriber_d_cols->safe_psql(
$node_publisher_d_cols->safe_psql(
'postgres', qq(
UPDATE dropped_cols SET a = 100;
+ UPDATE generated_cols SET a = 100;
));
$node_publisher_d_cols->wait_for_catchup('sub_dropped_cols');
@@ -232,5 +237,10 @@ is( $node_subscriber_d_cols->safe_psql(
qq(1),
'replication with RI FULL and dropped columns');
+is( $node_subscriber_d_cols->safe_psql(
+ 'postgres', "SELECT count(*) FROM generated_cols WHERE a = 100"),
+ qq(1),
+ 'replication with RI FULL and generated columns');
+
$node_publisher_d_cols->stop('fast');
$node_subscriber_d_cols->stop('fast');