mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Add support for temporary replication slots
This allows creating temporary replication slots that are removed automatically at the end of the session or on error. From: Petr Jelinek <petr.jelinek@2ndquadrant.com>
This commit is contained in:
@ -39,7 +39,7 @@ submake-test_decoding:
|
||||
|
||||
REGRESSCHECKS=ddl xact rewrite toast permissions decoding_in_xact \
|
||||
decoding_into_rel binary prepared replorigin time messages \
|
||||
spill
|
||||
spill slot
|
||||
|
||||
regresscheck: | submake-regress submake-test_decoding temp-install
|
||||
$(MKDIR_P) regression_output
|
||||
|
@ -702,7 +702,7 @@ SELECT pg_drop_replication_slot('regression_slot');
|
||||
|
||||
/* check that the slot is gone */
|
||||
SELECT * FROM pg_replication_slots;
|
||||
slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn
|
||||
-----------+--------+-----------+--------+----------+--------+------------+------+--------------+-------------+---------------------
|
||||
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn
|
||||
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
|
||||
(0 rows)
|
||||
|
||||
|
58
contrib/test_decoding/expected/slot.out
Normal file
58
contrib/test_decoding/expected/slot.out
Normal file
@ -0,0 +1,58 @@
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_p', 'test_decoding');
|
||||
?column?
|
||||
----------
|
||||
init
|
||||
(1 row)
|
||||
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_t', 'test_decoding', true);
|
||||
?column?
|
||||
----------
|
||||
init
|
||||
(1 row)
|
||||
|
||||
SELECT pg_drop_replication_slot('regression_slot_p');
|
||||
pg_drop_replication_slot
|
||||
--------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_p', 'test_decoding', false);
|
||||
?column?
|
||||
----------
|
||||
init
|
||||
(1 row)
|
||||
|
||||
-- reconnect to clean temp slots
|
||||
\c
|
||||
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?
|
||||
----------
|
||||
init
|
||||
(1 row)
|
||||
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot2', 'test_decoding', true);
|
||||
?column?
|
||||
----------
|
||||
init
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL);
|
||||
location | xid | data
|
||||
----------+-----+------
|
||||
(0 rows)
|
||||
|
||||
SELECT * FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL);
|
||||
location | xid | data
|
||||
----------+-----+------
|
||||
(0 rows)
|
||||
|
20
contrib/test_decoding/sql/slot.sql
Normal file
20
contrib/test_decoding/sql/slot.sql
Normal file
@ -0,0 +1,20 @@
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_p', 'test_decoding');
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_t', 'test_decoding', true);
|
||||
|
||||
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');
|
||||
|
||||
-- should fail because the temporary slot was dropped automatically
|
||||
SELECT pg_drop_replication_slot('regression_slot_t');
|
||||
|
||||
|
||||
-- test switching between slots in a session
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot1', 'test_decoding', true);
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot2', 'test_decoding', true);
|
||||
SELECT * FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL);
|
||||
SELECT * FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL);
|
Reference in New Issue
Block a user