aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/catalog/pg_publication.c41
1 files changed, 14 insertions, 27 deletions
diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c
index 65db07f6024..62f10bcbd28 100644
--- a/src/backend/catalog/pg_publication.c
+++ b/src/backend/catalog/pg_publication.c
@@ -142,7 +142,7 @@ is_publishable_class(Oid relid, Form_pg_class reltuple)
* the publication.
*/
static List *
-filter_partitions(List *relids, List *schemarelids)
+filter_partitions(List *relids)
{
List *result = NIL;
ListCell *lc;
@@ -161,16 +161,8 @@ filter_partitions(List *relids, List *schemarelids)
{
Oid ancestor = lfirst_oid(lc2);
- /*
- * Check if the parent table exists in the published table list.
- *
- * XXX As of now, we do this if the partition relation or the
- * partition relation's ancestor is present in schema publication
- * relations.
- */
- if (list_member_oid(relids, ancestor) &&
- (list_member_oid(schemarelids, relid) ||
- list_member_oid(schemarelids, ancestor)))
+ /* Check if the parent table exists in the published table list. */
+ if (list_member_oid(relids, ancestor))
{
skip = true;
break;
@@ -913,22 +905,17 @@ pg_get_publication_tables(PG_FUNCTION_ARGS)
PUBLICATION_PART_ROOT :
PUBLICATION_PART_LEAF);
tables = list_concat_unique_oid(relids, schemarelids);
- if (schemarelids && publication->pubviaroot)
- {
- /*
- * If the publication publishes partition changes via their
- * respective root partitioned tables, we must exclude
- * partitions in favor of including the root partitioned
- * tables. Otherwise, the function could return both the child
- * and parent tables which could cause data of the child table
- * to be double-published on the subscriber side.
- *
- * XXX As of now, we do this when a publication has associated
- * schema or for all tables publication. See
- * GetAllTablesPublicationRelations().
- */
- tables = filter_partitions(tables, schemarelids);
- }
+
+ /*
+ * If the publication publishes partition changes via their
+ * respective root partitioned tables, we must exclude partitions
+ * in favor of including the root partitioned tables. Otherwise,
+ * the function could return both the child and parent tables
+ * which could cause data of the child table to be
+ * double-published on the subscriber side.
+ */
+ if (publication->pubviaroot)
+ tables = filter_partitions(tables);
}
funcctx->user_fctx = (void *) tables;