]> granicus.if.org Git - postgresql/commit
Correct logical decoding restore behaviour for subtransactions.
authorAndres Freund <andres@anarazel.de>
Tue, 4 Oct 2016 05:11:36 +0000 (22:11 -0700)
committerAndres Freund <andres@anarazel.de>
Tue, 4 Oct 2016 05:12:31 +0000 (22:12 -0700)
commit76c0b73df6c481a29cf6e45bebeafd6d71957f08
tree14865aa6c42c27cde80202126ac145a45a295857
parent993d94c59038fb80068a2b7780a1062dcaa2bb4f
Correct logical decoding restore behaviour for subtransactions.

Before initializing iteration over a subtransaction's changes, the last
few changes were not spilled to disk. That's correct if the transaction
didn't spill to disk, but otherwise... This bug can lead to missed or
misorderd subtransaction contents when they were spilled to disk.

Move spilling of the remaining in-memory changes to
ReorderBufferIterTXNInit(), where it can easily be applied to the top
transaction and, if present, subtransactions.

Since this code had too many bugs already, noticeably increase test
coverage.

Fixes: #14319
Reported-By: Huan Ruan
Discussion: <20160909012610.20024.58169@wrigleys.postgresql.org>
Backport: 9,4-, where logical decoding was added
contrib/test_decoding/Makefile
contrib/test_decoding/expected/spill.out [new file with mode: 0644]
contrib/test_decoding/sql/spill.sql [new file with mode: 0644]
src/backend/replication/logical/reorderbuffer.c