From: | Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com> |
---|---|
To: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> |
Cc: | Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com> |
Subject: | Re: logical decoding and replication of sequences, take 2 |
Date: | 2023-07-26 15:18:35 |
Message-ID: | b47bc083-1d3d-05b7-d883-2f13bab58cc9@enterprisedb.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 7/26/23 09:27, Amit Kapila wrote:
> On Wed, Jul 26, 2023 at 9:37 AM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
>>
>> ...
>>
>
> I was reading this email thread and found the email by Andres [1]
> which seems to me to say the same thing: "I assume that part of the
> initial sync would have to be a new sequence synchronization step that
> reads all the sequence states on the publisher and ensures that the
> subscriber sequences are at the same point. There's a bit of
> trickiness there, but it seems entirely doable. The logical
> replication replay support for sequences will have to be a bit careful
> about not decreasing the subscriber's sequence values - the standby
> initially will be ahead of the
> increments we'll see in the WAL.". Now, IIUC this means that even
> before the sequence is marked as SYNCDONE, it shouldn't go backward.
>
Well, I could argue that's more an opinion, and I'm not sure it really
contradicts the idea that the sequence should not go backwards only
after the sync completes.
Anyway, I was thinking about this a bit more, and it seems it's not as
difficult to use the page LSN to ensure sequences don't go backwards.
The 0005 change does that, by:
1) adding pg_sequence_state, that returns both the sequence state and
the page LSN
2) copy_sequence returns the page LSN
3) tablesync then sets this LSN as origin_startpos (which for tables is
just the LSN of the replication slot)
AFAICS this makes it work - we start decoding at the page LSN, so that
we skip the increments that could lead to the sequence going backwards.
regards
--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachment | Content-Type | Size |
---|---|---|
0001-Logical-decoding-of-sequences-20230726.patch | text/x-patch | 54.3 KB |
0002-Add-decoding-of-sequences-to-test_decoding-20230726.patch | text/x-patch | 20.6 KB |
0003-Add-decoding-of-sequences-to-built-in-repli-20230726.patch | text/x-patch | 256.8 KB |
0004-Catchup-up-to-a-LSN-after-copy-of-the-seque-20230726.patch | text/x-patch | 3.1 KB |
0005-use-page-LSN-for-sequences-20230726.patch | text/x-patch | 12.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Anthonin Bonnefoy | 2023-07-26 15:54:51 | Re: POC: Extension for adding distributed tracing - pg_tracing |
Previous Message | Dagfinn Ilmari Mannsåker | 2023-07-26 14:28:55 | Re: [PATCH] Check more invariants during syscache initialization |