
Commit 0da92dc530 improved the logical decoding infrastructure to handle sequences, and did various changes to related parts (WAL logging etc.). But it did not include any implementation of the new callbacks added to OutputPluginCallbacks. This extends test_decoding with two callbacks to decode sequences. The decoding of sequences may be disabled using 'include-sequences', a new option of the output plugin. Author: Tomas Vondra, Cary Huang Reviewed-by: Peter Eisentraut, Hannu Krosing, Andres Freund Discussion: https://postgr.es/m/d045f3c2-6cfb-06d3-5540-e63c320df8bc@enterprisedb.com Discussion: https://postgr.es/m/1710ed7e13b.cd7177461430746.3372264562543607781@highgo.ca
42 lines
1.4 KiB
PL/PgSQL
42 lines
1.4 KiB
PL/PgSQL
-- predictability
|
|
SET synchronous_commit = on;
|
|
|
|
-- fail because we're creating a slot while in an xact with xid
|
|
BEGIN;
|
|
SELECT pg_current_xact_id() = '0';
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
ROLLBACK;
|
|
|
|
-- fail because we're creating a slot while in a subxact whose topxact has an xid
|
|
BEGIN;
|
|
SELECT pg_current_xact_id() = '0';
|
|
SAVEPOINT barf;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
ROLLBACK TO SAVEPOINT barf;
|
|
ROLLBACK;
|
|
|
|
-- succeed, outside tx.
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
SELECT 'stop' FROM pg_drop_replication_slot('regression_slot');
|
|
|
|
-- succeed, in tx without xid.
|
|
BEGIN;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
COMMIT;
|
|
|
|
CREATE TABLE nobarf(id serial primary key, data text);
|
|
INSERT INTO nobarf(data) VALUES('1');
|
|
|
|
-- decoding works in transaction with xid
|
|
BEGIN;
|
|
SELECT pg_current_xact_id() = '0';
|
|
-- don't show yet, haven't committed
|
|
INSERT INTO nobarf(data) VALUES('2');
|
|
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
|
|
COMMIT;
|
|
|
|
INSERT INTO nobarf(data) VALUES('3');
|
|
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
|
|
|
|
SELECT 'stop' FROM pg_drop_replication_slot('regression_slot');
|