Re: Logical replication: lost updates/deletes and invalid log messages caused by SnapshotDirty + concurrent updates

From: Zsolt Parragi <zsolt(dot)parragi(at)percona(dot)com>
To: "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>
Cc: Mihail Nikalayeu <mihailnikalayeu(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, "manuelreyesbravo(at)gmail(dot)com" <manuelreyesbravo(at)gmail(dot)com>
Subject: Re: Logical replication: lost updates/deletes and invalid log messages caused by SnapshotDirty + concurrent updates
Date: 2026-10-28 23:48:38
Message-ID: CAN4CZFNa4Xafa1Kf4WxGLcHsu2yZkXMdYmRN9dinMECGd9GWvg@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> Can you put a comment why we need to get the GetLatestSnapshot()? Per my
> understanding it's for observing tuples which are updated by concurrent transactions.
> I initially wondered it may break the transaction isolation level REPEATABLE READ
> and the function should return false: but this can lose changes from the publisher.

+1. With default_transaction_isolation = SERIALIZABLE, the patch also
takes SIREAD locks and can cause the apply worker to fail with
serialization failures because of that. I am not 100% sure this is a
new issue or if it can happen in different ways, but it doesn't seem
intended or useful.

See the attached claude-generated test case.

Attachment Content-Type Size
041_apply_search_serializable.pl application/octet-stream 5.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Zsolt Parragi 2026-10-28 23:53:40 Re: Parallel vacuum: check XID wraparound failsafe between indexes
Previous Message Bryan Green 2026-10-28 23:31:47 LWLock tranches registered by SLRUs are thrown away at startup