Re: Added schema level support for publication.

Artur Zakirov <zaartur@gmail.com>

From: Artur Zakirov <zaartur@gmail.com>
To: vignesh C <vignesh21@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, "tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>, "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>, Ajin Cherian <itsajin@gmail.com>, Rahila Syed <rahilasyed90@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Date: 2024-12-18T11:04:41Z
Lists: pgsql-hackers
On Tue, 17 Dec 2024 at 10:43, vignesh C <vignesh21@gmail.com> wrote:
> > If I understand your suggestion correctly I think this will break the
> > "--exclude-schema" option of pg_dump. That change will dump all
> > mappings between publications and schemas for publications which are
> > dumped.
> >
> > That solves the issue with special schemas, but restore will fail if
> > some schemas were explicitly excluded. pg_dump will include in the
> > dump ALTER PUBLICATION <pub> ADD TABLES IN SCHEMA <schema> even for
> > those schemas which are not created during restore.
>
> This is already the case in the existing implementation, so users
> should not be surprised by the proposed change.

Currently the behavior isn't the same as the proposed change.

Sorry, I might have been not clear when I described what might be
wrong with this. Here is the example with the proposed patch [1].

Create necessary objects to test:

    create schema nsp;
    create publication pub for tables in schema nsp;

If you run pg_dump excluding the schema "nsp":

    pg_dump -d postgres -U postgres -f backup --exclude-schema=nsp

In the resulting file "backup" you will have:

    ...
    ALTER PUBLICATION pub ADD TABLES IN SCHEMA nsp;
    ...

which you won't have on the current master. And I think this is not
what users might expect and it can break some of the scenarios because
during restore they will have an error:

    ERROR:  schema "nsp" does not exist


1. https://www.postgresql.org/message-id/CALDaNm1TQqBC5ZP5BsNf2LKVu1kEJNJn2spFwbAtyLn1FoAFGQ%40mail.gmail.com

-- 
Kind regards,
Artur



Commits

  1. Include schema/table publications even with exclude options in dump.

  2. Rename some enums to use TABLE instead of REL.

  3. Add tap tests for the schema publications.

  4. Allow publishing the tables of schema.

  5. In pg_dump, use simplehash.h to look up dumpable objects by OID.