Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Add test coverage for "unchanged toast column" replication code path.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 22 Nov 2019 17:52:26 +0000 (12:52 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 22 Nov 2019 17:52:26 +0000 (12:52 -0500)
It seems pretty unacceptable to have no regression test coverage
for this aspect of the logical replication protocol, especially
given the bugs we've found in related code.

Discussion: https://postgr.es/m/16129-a0c0f48e71741e5f@postgresql.org

src/test/subscription/t/001_rep_changes.pl

index f2be0e21ea52ec6eeb50f0a0619f932649d0aae6..77a1560b23daa80d5dcfe8d0b915341735159e02 100644 (file)
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 use PostgresNode;
 use TestLib;
-use Test::More tests => 20;
+use Test::More tests => 22;
 
 # Initialize publisher node
 my $node_publisher = get_new_node('publisher');
@@ -168,9 +168,38 @@ is( $result, qq(local|1.1|baz|1
 local|2.2|bar|2),
    'update works with different column order and subscriber local values');
 
+# check behavior with toasted values
+
+$node_publisher->safe_psql('postgres',
+   "UPDATE tab_mixed SET b = repeat('xyzzy', 100000) WHERE a = 2");
+
+$node_publisher->wait_for_catchup('tap_sub');
+
+$result = $node_subscriber->safe_psql('postgres',
+   "SELECT a, length(b), c, d FROM tab_mixed ORDER BY a");
+is( $result, qq(1|3|1.1|local
+2|500000|2.2|local),
+   'update transmits large column value');
+
+$node_publisher->safe_psql('postgres',
+   "UPDATE tab_mixed SET c = 3.3 WHERE a = 2");
+
+$node_publisher->wait_for_catchup('tap_sub');
+
+$result = $node_subscriber->safe_psql('postgres',
+   "SELECT a, length(b), c, d FROM tab_mixed ORDER BY a");
+is( $result, qq(1|3|1.1|local
+2|500000|3.3|local),
+   'update with non-transmitted large column value');
+
 # check behavior with dropped columns
 
+# this update should get transmitted before the column goes away
+$node_publisher->safe_psql('postgres',
+   "UPDATE tab_mixed SET b = 'bar', c = 2.2 WHERE a = 2");
+
 $node_publisher->safe_psql('postgres', "ALTER TABLE tab_mixed DROP COLUMN b");
+
 $node_publisher->safe_psql('postgres',
    "UPDATE tab_mixed SET c = 11.11 WHERE a = 1");