Allow publishing the tables of schema

Enterprise / PostgreSQL - Amit Kapila [postgresql.org] - 27 October 2021 02:14 UTC

A new option "FOR ALL TABLES IN SCHEMA" in Create/Alter Publication allows one or more schemas to be specified, whose tables are selected by the publisher for sending the data to the subscriber.

The new syntax allows specifying both the tables and schemas. For example: CREATE PUBLICATION pub1 FOR TABLE t1,t2,t3, ALL TABLES IN SCHEMA s1,s2; OR ALTER PUBLICATION pub1 ADD TABLE t1,t2,t3, ALL TABLES IN SCHEMA s1,s2;

A new system table "pg_publication_namespace" has been added, to maintain the schemas that the user wants to publish through the publication. Modified the output plugin (pgoutput) to publish the changes if the relation is part of schema publication.

Updates pg_dump to identify and dump schema publications. Updates the \d family of commands to display schema publications and \dRp+ variant will now display associated schemas if any.

Author: Vignesh C, Hou Zhijie, Amit Kapila

5a2832465f Allow publishing the tables of schema.
doc/src/sgml/catalogs.sgml | 72 +++-
doc/src/sgml/logical-replication.sgml | 14 +-
doc/src/sgml/ref/alter_publication.sgml | 77 +++-
doc/src/sgml/ref/create_publication.sgml | 76 +++-
doc/src/sgml/ref/psql-ref.sgml | 4 +-
src/backend/catalog/Makefile | 4 +-
src/backend/catalog/aclchk.c | 2 +
src/backend/catalog/dependency.c | 9 +
src/backend/catalog/objectaddress.c | 149 +++++++
src/backend/catalog/pg_publication.c | 332 +++++++++++++++-
src/backend/commands/alter.c | 1 +
src/backend/commands/event_trigger.c | 4 +
src/backend/commands/publicationcmds.c | 490 +++++++++++++++++++++--
src/backend/commands/seclabel.c | 1 +
src/backend/commands/tablecmds.c | 28 ++
src/backend/nodes/copyfuncs.c | 22 +-
src/backend/nodes/equalfuncs.c | 21 +-
src/backend/parser/gram.y | 307 +++++++++++----
src/backend/replication/pgoutput/pgoutput.c | 19 +-
src/backend/utils/cache/relcache.c | 7 +
src/backend/utils/cache/syscache.c | 23 ++
src/bin/pg_dump/common.c | 5 +-
src/bin/pg_dump/pg_backup_archiver.c | 3 +-
src/bin/pg_dump/pg_dump.c | 143 ++++++-
src/bin/pg_dump/pg_dump.h | 13 +
src/bin/pg_dump/pg_dump_sort.c | 7 +
src/bin/pg_dump/t/002_pg_dump.pl | 30 ++
src/bin/psql/describe.c | 198 ++++++++--
src/bin/psql/tab-complete.c | 40 +-
src/include/catalog/catversion.h | 2 +-
src/include/catalog/dependency.h | 1 +
src/include/catalog/pg_publication.h | 8 +
src/include/catalog/pg_publication_namespace.h | 47 +++
src/include/commands/publicationcmds.h | 1 +
src/include/nodes/nodes.h | 1 +
src/include/nodes/parsenodes.h | 33 +-
src/include/utils/syscache.h | 2 +
src/test/regress/expected/alter_table.out | 14 +
src/test/regress/expected/object_address.out | 6 +-
src/test/regress/expected/oidjoins.out | 2 +
src/test/regress/expected/publication.out | 522 ++++++++++++++++++++++++-
src/test/regress/expected/sanity_check.out | 1 +
src/test/regress/sql/alter_table.sql | 12 +
src/test/regress/sql/object_address.sql | 3 +
src/test/regress/sql/publication.sql | 281 ++++++++++++-
src/tools/pgindent/typedefs.list | 5 +
46 files changed, 2830 insertions(+), 212 deletions(-)

Upstream: git.postgresql.org


  • Share