diff --git a/src/test/subscription/t/003_constraints.pl b/src/test/subscription/t/003_constraints.pl index 9f140b552b..94a3314378 100644 --- a/src/test/subscription/t/003_constraints.pl +++ b/src/test/subscription/t/003_constraints.pl @@ -3,7 +3,7 @@ use strict; use warnings; use PostgresNode; use TestLib; -use Test::More tests => 6; +use Test::More tests => 7; # Initialize publisher node my $node_publisher = get_new_node('publisher'); @@ -40,6 +40,20 @@ $node_subscriber->safe_psql('postgres', $node_publisher->wait_for_catchup('tap_sub'); +# Add replica trigger after event +$node_subscriber->safe_psql( + 'postgres', qq{ +CREATE FUNCTION after_event_fn() RETURNS TRIGGER AS \$\$ +BEGIN + RETURN NULL; +END; +\$\$ LANGUAGE plpgsql; +CREATE TRIGGER after_event_trg + AFTER INSERT OR UPDATE OR DELETE ON tab_fk + FOR EACH ROW EXECUTE PROCEDURE after_event_fn(); +ALTER TABLE tab_fk ENABLE REPLICA TRIGGER after_event_trg; +}); + $node_publisher->safe_psql('postgres', "INSERT INTO tab_fk (bid) VALUES (1);"); # "junk" value is meant to be large enough to force out-of-line storage @@ -47,6 +61,15 @@ $node_publisher->safe_psql('postgres', "INSERT INTO tab_fk_ref (id, bid, junk) VALUES (1, 1, repeat(pi()::text,20000));" ); +$node_publisher->safe_psql('postgres', + "INSERT INTO tab_fk (bid) VALUES (2);"); + +$node_publisher->safe_psql('postgres', + "UPDATE tab_fk SET bid = 3 WHERE bid = 2;"); + +$node_publisher->safe_psql('postgres', + "DELETE FROM tab_fk WHERE bid = 3;"); + $node_publisher->wait_for_catchup('tap_sub'); # Check data on subscriber @@ -58,6 +81,14 @@ $result = $node_subscriber->safe_psql('postgres', "SELECT count(*), min(bid), max(bid) FROM tab_fk_ref;"); is($result, qq(1|1|1), 'check replicated tab_fk_ref inserts on subscriber'); +# Check relcache reference leak +my $log = TestLib::slurp_file($node_subscriber->logfile); +unlike( + $log, + qr/WARNING: relcache reference leak:/, + "check relcache reference leak"); +$log = undef; + # Drop the fk on publisher $node_publisher->safe_psql('postgres', "DROP TABLE tab_fk CASCADE;");