mirror of https://github.com/postgres/postgres
parent
afd0fcbc5d
commit
d900e192a3
@ -0,0 +1,82 @@ |
|||||||
|
-- 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'); |
||||||
|
data |
||||||
|
------------------------------------------------------------------------- |
||||||
|
BEGIN |
||||||
|
COMMIT |
||||||
|
BEGIN |
||||||
|
COMMIT |
||||||
|
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 |
||||||
|
BEGIN |
||||||
|
COMMIT |
||||||
|
BEGIN |
||||||
|
COMMIT |
||||||
|
(30 rows) |
||||||
|
|
||||||
|
SELECT pg_drop_replication_slot('regression_slot'); |
||||||
|
pg_drop_replication_slot |
||||||
|
-------------------------- |
||||||
|
|
||||||
|
(1 row) |
||||||
|
|
@ -0,0 +1,50 @@ |
|||||||
|
-- predictability |
||||||
|
SET synchronous_commit = on; |
||||||
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); |
||||||
|
|
||||||
|
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'); |
||||||
|
|
||||||
|
SELECT pg_drop_replication_slot('regression_slot'); |
Loading…
Reference in new issue