| -- predictability |
| SET synchronous_commit = on; |
| SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); |
| ?column? |
| ---------- |
| init |
| (1 row) |
| |
| CREATE TABLE test_prepared1(id int); |
| CREATE TABLE test_prepared2(id int); |
| -- test simple successful use of a prepared xact |
| BEGIN; |
| INSERT INTO test_prepared1 VALUES (1); |
| PREPARE TRANSACTION 'test_prepared#1'; |
| COMMIT PREPARED 'test_prepared#1'; |
| INSERT INTO test_prepared1 VALUES (2); |
| -- test abort of a prepared xact |
| BEGIN; |
| INSERT INTO test_prepared1 VALUES (3); |
| PREPARE TRANSACTION 'test_prepared#2'; |
| ROLLBACK PREPARED 'test_prepared#2'; |
| INSERT INTO test_prepared1 VALUES (4); |
| -- test prepared xact containing ddl |
| BEGIN; |
| INSERT INTO test_prepared1 VALUES (5); |
| ALTER TABLE test_prepared1 ADD COLUMN data text; |
| INSERT INTO test_prepared1 VALUES (6, 'frakbar'); |
| PREPARE TRANSACTION 'test_prepared#3'; |
| -- test that we decode correctly while an uncommitted prepared xact |
| -- with ddl exists. |
| -- separate table because of the lock from the ALTER |
| -- this will come before the '5' row above, as this commits before it. |
| INSERT INTO test_prepared2 VALUES (7); |
| COMMIT PREPARED 'test_prepared#3'; |
| -- make sure stuff still works |
| INSERT INTO test_prepared1 VALUES (8); |
| INSERT INTO test_prepared2 VALUES (9); |
| -- cleanup |
| DROP TABLE test_prepared1; |
| DROP TABLE test_prepared2; |
| -- show results |
| SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); |
| data |
| ------------------------------------------------------------------------- |
| BEGIN |
| table public.test_prepared1: INSERT: id[integer]:1 |
| COMMIT |
| BEGIN |
| table public.test_prepared1: INSERT: id[integer]:2 |
| COMMIT |
| BEGIN |
| table public.test_prepared1: INSERT: id[integer]:4 |
| COMMIT |
| BEGIN |
| table public.test_prepared2: INSERT: id[integer]:7 |
| COMMIT |
| BEGIN |
| table public.test_prepared1: INSERT: id[integer]:5 |
| table public.test_prepared1: INSERT: id[integer]:6 data[text]:'frakbar' |
| COMMIT |
| BEGIN |
| table public.test_prepared1: INSERT: id[integer]:8 data[text]:null |
| COMMIT |
| BEGIN |
| table public.test_prepared2: INSERT: id[integer]:9 |
| COMMIT |
| (22 rows) |
| |
| SELECT pg_drop_replication_slot('regression_slot'); |
| pg_drop_replication_slot |
| -------------------------- |
| |
| (1 row) |
| |