From bcbecbce2fde3c6dfa9080db11663877808a007d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 7 Aug 2016 13:15:55 -0400 Subject: Don't propagate a null subtransaction snapshot up to parent transaction. This oversight could cause logical decoding to fail to decode an outer transaction containing changes, if a subtransaction had an XID but no actual changes. Per bug #14279 from Marko Tiikkaja. Patch by Marko based on analysis by Andrew Gierth. Discussion: <20160804191757.1430.39011@wrigleys.postgresql.org> --- contrib/test_decoding/sql/xact.sql | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'contrib/test_decoding/sql') diff --git a/contrib/test_decoding/sql/xact.sql b/contrib/test_decoding/sql/xact.sql index 9ce238f62df..aa555911e86 100644 --- a/contrib/test_decoding/sql/xact.sql +++ b/contrib/test_decoding/sql/xact.sql @@ -3,10 +3,10 @@ SET synchronous_commit = on; SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); --- bug #13844, xids in non-decoded records need to be inspected CREATE TABLE xact_test(data text); INSERT INTO xact_test VALUES ('before-test'); +-- bug #13844, xids in non-decoded records need to be inspected BEGIN; -- perform operation in xact that creates and logs xid, but isn't decoded SELECT * FROM xact_test FOR UPDATE; @@ -17,6 +17,17 @@ COMMIT; -- and now show those changes SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); +-- bug #14279, do not propagate null snapshot from subtransaction +BEGIN; +-- first insert +INSERT INTO xact_test VALUES ('main-txn'); +SAVEPOINT foo; +-- now perform operation in subxact that creates and logs xid, but isn't decoded +SELECT 1 FROM xact_test FOR UPDATE LIMIT 1; +COMMIT; +-- and now show those changes +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); + DROP TABLE xact_test; SELECT pg_drop_replication_slot('regression_slot'); -- cgit v1.2.3