Re: Logical Replication of sequences

Amit Kapila <amit.kapila16@gmail.com>

From: Amit Kapila <amit.kapila16@gmail.com>
To: Shinya Kato <shinya11.kato@gmail.com>
Cc: vignesh C <vignesh21@gmail.com>, Peter Smith <smithpb2250@gmail.com>, Chao Li <li.evan.chao@gmail.com>, Masahiko Sawada <sawada.mshk@gmail.com>, "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>, "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, Dilip Kumar <dilipbalaut@gmail.com>, shveta malik <shveta.malik@gmail.com>, Shlok Kyal <shlok.kyal.oss@gmail.com>, Nisha Moond <nisha.moond412@gmail.com>, Peter Eisentraut <peter@eisentraut.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Euler Taveira <euler@eulerto.com>, Michael Paquier <michael@paquier.xyz>, "Jonathan S. Katz" <jkatz@postgresql.org>
Date: 2025-11-06T04:40:23Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Doc: Add documentation for sequence synchronization.

  2. Remove unused assignment in CREATE PUBLICATION grammar.

  3. Add seq_sync_error_count to subscription statistics.

  4. Fix few issues in commit 5509055d69.

  5. Add sequence synchronization for logical replication.

  6. Add worker type argument to logical replication worker functions.

  7. Introduce "REFRESH SEQUENCES" for subscriptions.

  8. Refactor logical worker synchronization code into a separate file.

  9. Standardize use of REFRESH PUBLICATION in code and messages.

  10. Add "ALL SEQUENCES" support to publications.

  11. Expose sequence page LSN via pg_get_sequence_data.

  12. Resume conflict-relevant data retention automatically.

  13. Post-commit review fixes for 228c370868.

  14. Generate GUC tables from .dat file

On Thu, Nov 6, 2025 at 8:00 AM Shinya Kato <shinya11.kato@gmail.com> wrote:
>
>
> I discovered that the sequence sync worker fails for sequences
> containing single quotes.
> ---
> 2025-11-06 10:22:50.335 JST [1096008] ERROR:  could not fetch sequence
> information from the publisher: ERROR:  syntax error at or near
> "quote"
>         LINE 4: FROM ( VALUES ('public', 'regress'quote', 0), ('public', 'ho...
>                                                   ^
> 2025-11-06 10:22:50.335 JST [1088168] LOG:  background worker "logical
> replication sequencesync worker" (PID 1096008) exited with exit code 1
> ---
>
> I haven't read all the threads, so I might be mistaken, but I've
> created a patch.
>

Thanks for spotting the issue and providing a fix. Here are few comments:

1.
+ nsp_literal = quote_literal_cstr(seqinfo->nspname);
+ seq_literal = quote_literal_cstr(seqinfo->seqname);
+
+ appendStringInfo(seqstr, "(%s, %s, %d)",
+ nsp_literal, seq_literal, idx);
+
+ pfree(nsp_literal);
+ pfree(seq_literal);

We don't need this retail pfree as the current memory context at this
place will be TopTransactionContext that will anyway be freed after a
batch of sequences.

2.
@@ -147,13 +148,18 @@ get_sequences_string(List *seqindexes, StringInfo buf)
  resetStringInfo(buf);
  foreach_int(seqidx, seqindexes)
  {
+ char *qualified_name;
+
  LogicalRepSequenceInfo *seqinfo =
  (LogicalRepSequenceInfo *) list_nth(seqinfos, seqidx);

  if (buf->len > 0)
  appendStringInfoString(buf, ", ");

- appendStringInfo(buf, "\"%s.%s\"", seqinfo->nspname, seqinfo->seqname);
+ qualified_name = quote_qualified_identifier(seqinfo->nspname,
+ seqinfo->seqname);
+ appendStringInfoString(buf, qualified_name);

The function get_sequences_string() is used in WARNING code path and
normally we don't quote names in messages. For example, see following
cases:

parserOpenTable:
ereport(ERROR,
    (errcode(ERRCODE_UNDEFINED_TABLE),
    errmsg("relation \"%s.%s\" does not exist",
        relation->schemaname, relation->relname)));



RangeVarGetRelidExtended:
        ereport(elevel,
            (errcode(ERRCODE_LOCK_NOT_AVAILABLE),
             errmsg("could not obtain lock on relation \"%s.%s\"",
                relation->schemaname, relation->relname)));

3. Also, see, if the newly added test can be combined with other existing tests.

-- 
With Regards,
Amit Kapila.