diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/subscription/t/100_bugs.pl | 56 | 
1 files changed, 55 insertions, 1 deletions
| diff --git a/src/test/subscription/t/100_bugs.pl b/src/test/subscription/t/100_bugs.pl index a91935e9eec..a11f6be462b 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 => 7; +use Test::More tests => 8;  # Bug #15114 @@ -227,3 +227,57 @@ 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 +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; + +my $node_subscriber_d_cols = get_new_node('node_subscriber_d_cols'); +$node_subscriber_d_cols->init(allows_streaming => 'logical'); +$node_subscriber_d_cols->start; + +$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; +	-- some initial data +	INSERT INTO dropped_cols VALUES (1, 1, 1); +)); + +$node_subscriber_d_cols->safe_psql( +	'postgres', qq( +	 CREATE TABLE dropped_cols (a int, b_drop int, c int); +)); + +my $publisher_connstr_d_cols = +  $node_publisher_d_cols->connstr . ' dbname=postgres'; +$node_subscriber_d_cols->safe_psql('postgres', +	"CREATE SUBSCRIPTION sub_dropped_cols CONNECTION '$publisher_connstr_d_cols' PUBLICATION pub_dropped_cols" +); +$node_subscriber_d_cols->wait_for_subscription_sync; + +$node_publisher_d_cols->safe_psql( +	'postgres', qq( +		ALTER TABLE dropped_cols DROP COLUMN b_drop; +)); +$node_subscriber_d_cols->safe_psql( +	'postgres', qq( +		ALTER TABLE dropped_cols DROP COLUMN b_drop; +)); + +$node_publisher_d_cols->safe_psql( +	'postgres', qq( +		UPDATE dropped_cols SET a = 100; +)); +$node_publisher_d_cols->wait_for_catchup('sub_dropped_cols'); + +is( $node_subscriber_d_cols->safe_psql( +		'postgres', "SELECT count(*) FROM dropped_cols WHERE a = 100"), +	qq(1), +	'replication with RI FULL and dropped columns'); + +$node_publisher_d_cols->stop('fast'); +$node_subscriber_d_cols->stop('fast'); | 
