pgsql: Fix snapshot handling in logicalmsg_decode

From: Tomas Vondra <tomas(dot)vondra(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix snapshot handling in logicalmsg_decode
Date: 2023-02-22 16:35:08
Message-ID: E1pUs5E-000A7F-8O@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix snapshot handling in logicalmsg_decode

Whe decoding a transactional logical message, logicalmsg_decode called
SnapBuildGetOrBuildSnapshot. But we may not have a consistent snapshot
yet at that point. We don't actually need the snapshot in this case
(during replay we'll have the snapshot from the transaction), so in
practice this is harmless. But in assert-enabled build this crashes.

Fixed by requesting the snapshot only in non-transactional case, where
we are guaranteed to have SNAPBUILD_CONSISTENT.

Backpatch to 11. The issue exists since 9.6.

Backpatch-through: 11
Reviewed-by: Andres Freund
Discussion: https://postgr.es/m/84d60912-6eab-9b84-5de3-41765a5449e8@enterprisedb.com

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8b9cbd42b61ff55e5519631bada5d310159e3a5f

Modified Files
--------------
src/backend/replication/logical/decode.c | 14 ++++++++++++--
src/backend/replication/logical/reorderbuffer.c | 10 ++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tomas Vondra 2023-02-22 16:35:17 pgsql: Fix snapshot handling in logicalmsg_decode
Previous Message Tomas Vondra 2023-02-22 16:35:00 pgsql: Fix snapshot handling in logicalmsg_decode