Re: Logical Replication of sequences

From: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
To: vignesh C <vignesh21(at)gmail(dot)com>
Cc: shveta malik <shveta(dot)malik(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Peter Smith <smithpb2250(at)gmail(dot)com>, Shlok Kyal <shlok(dot)kyal(dot)oss(at)gmail(dot)com>, Peter Eisentraut <peter(at)eisentraut(dot)org>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Euler Taveira <euler(at)eulerto(dot)com>, Michael Paquier <michael(at)paquier(dot)xyz>, "Zhijie Hou (Fujitsu)" <houzj(dot)fnst(at)fujitsu(dot)com>, "Jonathan S(dot) Katz" <jkatz(at)postgresql(dot)org>
Subject: Re: Logical Replication of sequences
Date: 2025-08-18 23:21:20
Message-ID: CAD21AoCDU=aWjJrHeVrqTWDUgw6XzMm_-K4e9fWuJF25gzTxCQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Aug 18, 2025 at 2:13 AM vignesh C <vignesh21(at)gmail(dot)com> wrote:
>
> On Sat, 16 Aug 2025 at 14:15, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> wrote:
> >
> > As I understand it, the logical replication of sequences implemented
> > by these patches shares the same user interface as table replication
> > (utilizing CREATE PUBLICATION and CREATE SUBSCRIPTION commands for
> > configuration). However, the underlying replication mechanism totally
> > differs from table replication. While table replication sends
> > changesets extracted from WAL records (i.e., changes are applied in
> > commit LSN order), sequence replication
> > synchronizes the subscriber's sequences with the publisher's current
> > state. This raises an interesting theoretical question: In a scenario
> > where we implement DDL replication (extracting and replicating DDL
> > statements from WAL records to subscribers, as previously proposed),
> > how would sequence-related DDL replication interact with the sequence
> > synchronization mechanism implemented in this patch?
>
> The handling of sequence DDL should mirror how we manage table DDL:
> 1. During CREATE SUBSCRIPTION - Create sequences along with
> tables—there’s no issue when initializing them during the initial
> sync.
> 2. During Incremental Synchronization - Treat sequence changes like
> table changes:
> 2.a Creating new sequences: Apply the creation on the subscriber side
> when the corresponding WAL record appears.
> 2.b Dropping sequences: Handle drops in the same way they should
> propagate and execute on the subscriber.
> 2.c. Handling Modifications to Existing Sequences
> Sequence DDL changes can lead to two different outcomes:
> i) No Conflict - If the change applies cleanly, accept and apply it immediately.
> ii) Conflict
> An example:
> CREATE SEQUENCE s1 MINVALUE 10 MAXVALUE 20;
> SELECT nextval('s1') — called several times, advancing the sequence
> ALTER SEQUENCE s1 MAXVALUE 12;
> -- Error:
> ERROR: RESTART value (14) cannot be greater than MAXVALUE (12)
>
> In such conflict cases, we should consider using setval() with
> is_called = false to adjust the sequence safely and avoid errors.
>
> Thoughts?

Thank you for the explanation.

IIUC even with DDL replication support for sequences, users would
still need to manage the order of DDL operations for sequences and
their synchronization (specifically when executing the REFRESH
PUBLICATION [SEQUENCE] command). For example, if a sequence is dropped
on the publisher, the subscriber would encounter synchronization
failures unless the DROP SEQUENCE is properly applied. This potential
issue concerns me.

I recall that Amit initially proposed an approach involving a special
NOOP record to enable the walsender to read and transmit sequence data
to the subscriber[1]. Have you considered incorporating this concept
into the current implementation? Under this approach, REFRESH
PUBLICATION [SEQUENCE] would simply trigger the subscriber to write a
special WAL record for sequence synchronization. Subsequently, when
decoding the WAL record, the walsender would collect sequence data
associated with its publications and transmit it to the subscriber.
The apply worker would then process sequence changes in the same
manner as table changes.

We could potentially optimize this process by including the LSN of the
last sequence synchronization in the WAL record, allowing the
walsender to transmit only those sequences whose page LSN exceeds this
value.

This thread is quite long so I may have missed some previous
discussion of these points, so I apologize if these matters have
already been addressed.

Regards,

[1] https://www.postgresql.org/message-id/CAA4eK1LC%2BKJiAkSrpE_NwvNdidw9F2os7GERUeSxSKv71gXysQ%40mail.gmail.com

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2025-08-18 23:28:07 Re: Sequence Access Methods, round two
Previous Message David Rowley 2025-08-18 23:21:06 Re: Compilation issues for HASH_STATISTICS and HASH_DEBUG options