0005-fixup-Publication-WHERE-condition-support-for-pg_dum.patch

text/plain

Filename: 0005-fixup-Publication-WHERE-condition-support-for-pg_dum.patch
Type: text/plain
Part: 4
Message: Re: row filtering for logical replication

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch 0005
Subject: fixup! Publication WHERE condition support for pg_dump
File+
src/bin/pg_dump/pg_dump.c 11 5
From af012ad7d7592f88e353642fd715a3825ea2ec72 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Thu, 25 Mar 2021 12:07:11 +0100
Subject: [PATCH 5/6] fixup! Publication WHERE condition support for pg_dump

Make pg_dump backward compatible.

Also add necessary parentheses around expression.  pg_get_expr will
supply the parentheses in many cases, but it won't for things like
"WHERE TRUE".
---
 src/bin/pg_dump/pg_dump.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 72d87f21c8..af57a50f27 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -4141,10 +4141,16 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables)
 	query = createPQExpBuffer();
 
 	/* Collect all publication membership info. */
-	appendPQExpBufferStr(query,
-						 "SELECT tableoid, oid, prpubid, prrelid, "
-						 "pg_catalog.pg_get_expr(prqual, prrelid) AS prrelqual "
-						 "FROM pg_catalog.pg_publication_rel");
+	if (fout->remoteVersion >= 140000)
+		appendPQExpBufferStr(query,
+							 "SELECT tableoid, oid, prpubid, prrelid, "
+							 "pg_catalog.pg_get_expr(prqual, prrelid) AS prrelqual "
+							 "FROM pg_catalog.pg_publication_rel");
+	else
+		appendPQExpBufferStr(query,
+							 "SELECT tableoid, oid, prpubid, prrelid, "
+							 "NULL AS prrelqual "
+							 "FROM pg_catalog.pg_publication_rel");
 	res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
 	ntups = PQntuples(res);
@@ -4233,7 +4239,7 @@ dumpPublicationTable(Archive *fout, const PublicationRelInfo *pubrinfo)
 	appendPQExpBuffer(query, " %s",
 					  fmtQualifiedDumpable(tbinfo));
 	if (pubrinfo->pubrelqual)
-		appendPQExpBuffer(query, " WHERE %s", pubrinfo->pubrelqual);
+		appendPQExpBuffer(query, " WHERE (%s)", pubrinfo->pubrelqual);
 	appendPQExpBufferStr(query, ";\n");
 
 	/*
-- 
2.30.2