diff --git a/contrib/test_decoding/expected/slot.out b/contrib/test_decoding/expected/slot.out index 5e6b70ba38..c9171ffa5f 100644 --- a/contrib/test_decoding/expected/slot.out +++ b/contrib/test_decoding/expected/slot.out @@ -22,17 +22,26 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_p', 'test init (1 row) --- reconnect to clean temp slots -\c +-- here we want to start a new session and wait till old one is gone +select pg_backend_pid() as oldpid \gset +\c - +do 'declare c int = 0; +begin + while (select count(*) from pg_stat_activity where pid = ' + :'oldpid' + ') > 0 loop c := c + 1; perform pg_stat_clear_snapshot(); end loop; + raise log ''slot test looped % times'', c; +end'; +-- should fail because the temporary slot was dropped automatically +SELECT pg_drop_replication_slot('regression_slot_t'); +ERROR: replication slot "regression_slot_t" does not exist +-- permanent slot has survived SELECT pg_drop_replication_slot('regression_slot_p'); pg_drop_replication_slot -------------------------- (1 row) --- should fail because the temporary slot was dropped automatically -SELECT pg_drop_replication_slot('regression_slot_t'); -ERROR: replication slot "regression_slot_t" does not exist -- test switching between slots in a session SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot1', 'test_decoding', true); ?column? diff --git a/contrib/test_decoding/sql/slot.sql b/contrib/test_decoding/sql/slot.sql index 3b0aecd6a8..5d6d97a9e3 100644 --- a/contrib/test_decoding/sql/slot.sql +++ b/contrib/test_decoding/sql/slot.sql @@ -4,14 +4,22 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_t', 'test SELECT pg_drop_replication_slot('regression_slot_p'); SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_p', 'test_decoding', false); --- reconnect to clean temp slots -\c - -SELECT pg_drop_replication_slot('regression_slot_p'); +-- here we want to start a new session and wait till old one is gone +select pg_backend_pid() as oldpid \gset +\c - +do 'declare c int = 0; +begin + while (select count(*) from pg_stat_activity where pid = ' + :'oldpid' + ') > 0 loop c := c + 1; perform pg_stat_clear_snapshot(); end loop; + raise log ''slot test looped % times'', c; +end'; -- should fail because the temporary slot was dropped automatically SELECT pg_drop_replication_slot('regression_slot_t'); +-- permanent slot has survived +SELECT pg_drop_replication_slot('regression_slot_p'); -- test switching between slots in a session SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot1', 'test_decoding', true);