HEAD_v19-0002-Fix-this-problem-for-back-branches.patch
application/octet-stream
Filename: HEAD_v19-0002-Fix-this-problem-for-back-branches.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v19-0002
Subject: Fix this problem for back branches
| File | + | − |
|---|---|---|
| src/backend/commands/subscriptioncmds.c | 25 | 6 |
From 65e62115fc68070e9172a8c9668cee62b8e97c42 Mon Sep 17 00:00:00 2001
From: Wang Wei <wangw.fnst@fujitsu.com>
Date: Fri, 17 Mar 2023 13:16:00 +0800
Subject: [PATCH v19 2/2] Fix this problem for back branches
---
src/backend/commands/subscriptioncmds.c | 31 ++++++++++++++++++++-----
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 44fc371d2c..9692aac730 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -1977,16 +1977,35 @@ fetch_table_list(WalReceiverConn *wrconn, List *publications)
}
else
{
- appendStringInfoString(&cmd, "SELECT DISTINCT t.schemaname, t.tablename \n");
+ appendStringInfoString(&cmd, "WITH pub_tabs AS(\n"
+ " SELECT DISTINCT N.nspname, C.oid, C.relname, C.relispartition\n");
/* Get column lists for each relation if the publisher supports it */
if (check_columnlist)
- appendStringInfoString(&cmd, ", t.attnames\n");
+ appendStringInfoString(&cmd, ", ( SELECT array_agg(a.attname ORDER BY a.attnum)\n"
+ " FROM pg_attribute a\n"
+ " WHERE a.attrelid = GPT.relid AND a.attnum > 0 AND\n"
+ " NOT a.attisdropped AND\n"
+ " (a.attnum = ANY(GPT.attrs) OR GPT.attrs IS NULL)\n"
+ " ) AS attnames\n");
+
+ appendStringInfo(&cmd, " FROM pg_publication P,\n"
+ " LATERAL pg_get_publication_tables(P.pubname) GPT,\n"
+ " pg_class C JOIN pg_namespace N ON (N.oid = C.relnamespace)\n"
+ " WHERE C.oid = GPT.relid AND P.pubname IN ( %s )\n"
+ ")\n"
+ "SELECT DISTINCT pub_tabs.nspname, pub_tabs.relname\n",
+ pub_names.data);
+
+ /* Get column lists for each relation if the publisher supports it */
+ if (check_columnlist)
+ appendStringInfoString(&cmd, ", pub_tabs.attnames\n");
- appendStringInfoString(&cmd, "FROM pg_catalog.pg_publication_tables t\n"
- " WHERE t.pubname IN (");
- get_publications_str(publications, &cmd, true);
- appendStringInfoChar(&cmd, ')');
+ appendStringInfoString(&cmd, "FROM pub_tabs\n"
+ " WHERE (pub_tabs.relispartition IS FALSE\n"
+ " OR NOT EXISTS (SELECT 1 FROM pg_partition_ancestors(pub_tabs.oid) as PA\n"
+ " WHERE PA.relid IN (SELECT pub_tabs.oid FROM pub_tabs)\n"
+ " AND PA.relid != pub_tabs.oid))\n");
}
res = walrcv_exec(wrconn, cmd.data, check_columnlist ? 3 : 2, tableRow);
--
2.39.1.windows.1