From 04b6b6566f4cf4ddc8cf3ddc51420e93c599024d Mon Sep 17 00:00:00 2001 From: Euler Taveira Date: Fri, 27 May 2022 14:43:10 -0300 Subject: [PATCH v2 2/2] test: heap rewrite for materialized view in logical replication --- src/test/subscription/t/006_rewrite.pl | 35 +++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/test/subscription/t/006_rewrite.pl b/src/test/subscription/t/006_rewrite.pl index 5e3211aefa..27eb6a1cb7 100644 --- a/src/test/subscription/t/006_rewrite.pl +++ b/src/test/subscription/t/006_rewrite.pl @@ -3,7 +3,8 @@ use strict; use warnings; use PostgresNode; use TestLib; -use Test::More tests => 2; +use Time::HiRes qw(usleep); +use Test::More tests => 3; sub wait_for_caught_up { @@ -26,6 +27,13 @@ my $ddl = "CREATE TABLE test1 (a int, b text);"; $node_publisher->safe_psql('postgres', $ddl); $node_subscriber->safe_psql('postgres', $ddl); +$ddl = "CREATE TABLE test2 (a int, b text);"; +$node_publisher->safe_psql('postgres', $ddl); +$node_subscriber->safe_psql('postgres', $ddl); + +$node_publisher->safe_psql('postgres', q{INSERT INTO test2 (a, b) VALUES (10, 'ten'), (20, 'twenty');}); +$node_publisher->safe_psql('postgres', 'CREATE MATERIALIZED VIEW test3 AS SELECT a, b FROM test2;'); + my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; my $appname = 'encoding_test'; @@ -69,5 +77,30 @@ is($node_subscriber->safe_psql('postgres', q{SELECT a, b, c FROM test1}), 3|three|33), 'data replicated to subscriber'); +$node_publisher->safe_psql('postgres', 'REFRESH MATERIALIZED VIEW test3;'); + +# an additional row to check if the REFRESH worked +$node_publisher->safe_psql('postgres', q{INSERT INTO test2 (a, b) VALUES (30, 'thirty');}); + +my $max_attempts = 10 * $TestLib::timeout_default; +my $attempts = 0; +my $ret = 0; +my $errmsg = qr/logical replication target relation.*does not exist/; +while ($attempts < $max_attempts) +{ + # Succeed. Bail out. + if ($node_subscriber->safe_psql('postgres', 'SELECT COUNT(1) FROM test2') == 3) { + $ret = 1; + last; + } + + # Failed. Bail out. + last if (slurp_file($node_subscriber->logfile) =~ $errmsg); + + usleep(100_000); + $attempts++; +} +is($ret, 1, 'heap rewrite for materialized view on subscriber'); + $node_subscriber->stop; $node_publisher->stop; -- 2.30.2