| 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 |
| 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 |