From a61bff2bf479cfebda18a1655323eec1b19370de Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 8 Dec 2021 11:15:25 +0530 Subject: [PATCH] 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 are published with publish_via_partition_root as false which is not what the user would expect. We decided not to backpatch this as there is no user complaint about this and it doesn't seem to be a critical issue. 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;