]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Stop demanding that top xact must be seen before subxact in decoding.
authorAmit Kapila <akapila@postgresql.org>
Wed, 19 Feb 2020 03:29:18 +0000 (08:59 +0530)
committerAmit Kapila <akapila@postgresql.org>
Wed, 19 Feb 2020 03:29:18 +0000 (08:59 +0530)
commit05555f7aaa08a3b795265c99ac98e685aa8b4771
tree3bd2d73cfcfc9d964b0d6cddbb237c377587acfd
parentd9ec8d1d7dc2bfaa7ae001c4319f6988a83dd486
Stop demanding that top xact must be seen before subxact in decoding.

Manifested as

ERROR:  subtransaction logged without previous top-level txn record

this check forbids legit behaviours like
 - First xl_xact_assignment record is beyond reading, i.e. earlier
   restart_lsn.
 - After restart_lsn there is some change of a subxact.
 - After that, there is second xl_xact_assignment (for another subxact)
   revealing the relationship between top and first subxact.

Such a transaction won't be streamed anyway because we hadn't seen it in
full.  Saying for sure whether xact of some record encountered after
the snapshot was deserialized can be streamed or not requires to know
whether it wrote something before deserialization point --if yes, it
hasn't been seen in full and can't be decoded. Snapshot doesn't have such
info, so there is no easy way to relax the check.

Reported-by: Hsu, John
Diagnosed-by: Arseny Sher
Author: Arseny Sher, Amit Kapila
Reviewed-by: Amit Kapila, Dilip Kumar
Backpatch-through: 9.5
Discussion: https://postgr.es/m/AB5978B2-1772-4FEE-A245-74C91704ECB0@amazon.com
contrib/test_decoding/Makefile
contrib/test_decoding/expected/subxact_without_top.out [new file with mode: 0644]
contrib/test_decoding/specs/subxact_without_top.spec [new file with mode: 0644]
src/backend/replication/logical/reorderbuffer.c