From b252f9d955515c4a05d11f73239ba8751a6a7994 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 1 Dec 2021 12:05:02 +0530 Subject: [PATCH v3] De-duplicate the result of pg_publication_tables view. We show duplicate values for child tables in publications that have both child and parent tables and is published with publish_via_partition_root as false which is not what the user would expect. Author: Hou Zhijie Reviewed-by: Bharath Rupireddy, Amit Langote, Amit Kapila Discussion: https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com --- src/backend/catalog/pg_publication.c | 4 ++++ src/test/regress/expected/publication.out | 8 ++++++++ src/test/regress/sql/publication.sql | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 63579b2f82..b40293fcb3 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -487,6 +487,10 @@ GetPublicationRelations(Oid pubid, PublicationPartOpt pub_partopt) systable_endscan(scan); table_close(pubrelsrel, AccessShareLock); + /* Now sort and de-duplicate the result list */ + list_sort(result, list_oid_cmp); + list_deduplicate_oid(result); + return result; } diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index 1feb558968..a2115c1c60 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -832,6 +832,14 @@ SELECT * FROM pg_publication_tables; pub | sch2 | tbl1_part1 (1 row) +-- Table publication that includes both the parent table and the child table +ALTER PUBLICATION pub ADD TABLE sch1.tbl1; +SELECT * FROM pg_publication_tables; + pubname | schemaname | tablename +---------+------------+------------ + pub | sch2 | tbl1_part1 +(1 row) + DROP PUBLICATION pub; DROP TABLE sch2.tbl1_part1; DROP TABLE sch1.tbl1; diff --git a/src/test/regress/sql/publication.sql b/src/test/regress/sql/publication.sql index 8fa0435c32..2fe41b07ae 100644 --- a/src/test/regress/sql/publication.sql +++ b/src/test/regress/sql/publication.sql @@ -469,6 +469,10 @@ DROP PUBLICATION pub; CREATE PUBLICATION pub FOR TABLE sch2.tbl1_part1 WITH (PUBLISH_VIA_PARTITION_ROOT=0); SELECT * FROM pg_publication_tables; +-- Table publication that includes both the parent table and the child table +ALTER PUBLICATION pub ADD TABLE sch1.tbl1; +SELECT * FROM pg_publication_tables; + DROP PUBLICATION pub; DROP TABLE sch2.tbl1_part1; DROP TABLE sch1.tbl1; -- 2.28.0.windows.1