Re: Logical Replication - revisit `is_table_publication` function implementation

From: Peter Smith <smithpb2250(at)gmail(dot)com>
To: vignesh C <vignesh21(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Logical Replication - revisit `is_table_publication` function implementation
Date: 2026-04-08 04:53:33
Message-ID: CAHut+Pv+a-7-NRrZv4v6RfaaUo5b21RXe0tGOu8CfKrxPjE=tw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Apr 8, 2026 at 1:45 PM vignesh C <vignesh21(at)gmail(dot)com> wrote:
>
> On Tue, 7 Apr 2026 at 12:32, Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
> >
> > Hi, after confirming my understanding of pg_publication_rel [1], I
> > revisited some logical replication internal functions.
> >
> > Specifically.
> > * The `is_table_publication` function is for checking if the
> > publication has a clause like "FOR TABLE t1".
> > * The `is_schema_publication` function is for checking if the
> > publication has a clause like "FOR TABLES IN SCHEMA s1".
> >
> > Notice that neither of these ("FOR TABLE", "FOR TABLES IN SCHEMA")
> > clauses are possible simultaneously with "FOR ALL TABLES".
> >
> > And we can readily discover if "FOR ALL TABLES" (aka `puballtables`)
> > is present from the pubform.
> >
> > We can use this to optimise and simplify the implementations of the
> > `is_schema_publication` and `is_table_publication` functions.
> >
> > PSA patch v1.
> >
> > AFAICT, the result is:
> > - less code + simpler logic. e.g. is_table_publication does not check
> > 'prexcept' anymore
> > - more efficient. e.g. skips unnecessary scanning when puballtables is true.
> > - more consistent. e.g., both functions are now almost identical.
> >
> > Thoughts?
>

Hi Vignesh. Thanks for reviewing!

> I'm not sure if this additional check is sufficient in case of
> is_schema_publication. Checking only puballtables can exclude FOR ALL
> TABLES, but it still cannot distinguish regular table publications,
> empty publications, or sequence publications. In all of those cases,
> we still need to check pg_publication_namespace.

Yes, this condition is only an optimisation for FOR ALL TABLES, as the
comment says.

IMO, the overhead of 1 additional boolean check for cases where it
doesn't help is an insignificant trade-off for the savings when it can
return false.

> And also why just check for puballtables why not to check for puballsequences

I think function is_schema_publication() is unrelated to 'puballsequences'.

e.g. all the following will still need to check
pg_publication_namespace, regardless of the 'puballsequences' value.

ex1. CREATE PUBLICATION ... FOR ALL SEQUENCES;
ex2. CREATE PUBLICATION ... FOR ALL SEQUENCES, FOR TABLES IN SCHEMA s1;
ex3. CREATE PUBLICATION ... FOR TABLES IN SCHEMA s1;

======
Kind Regards,
Peter Smith.
Fujitsu Austalia

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Xuneng Zhou 2026-04-08 04:59:03 Re: Implement waiting for wal lsn replay: reloaded
Previous Message David G. Johnston 2026-04-08 04:28:18 Re: doc: Improve wal_level and effective_wal_level GUC around logical replication