0007-Publication-where-condition-support-for-pg_dump.patch
application/octet-stream
Filename: 0007-Publication-where-condition-support-for-pg_dump.patch
Type: application/octet-stream
Part: 6
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 0007
Subject: Publication where condition support for pg_dump
| File | + | − |
|---|---|---|
| src/bin/pg_dump/pg_dump.c | 13 | 2 |
| src/bin/pg_dump/pg_dump.h | 1 | 0 |
From ef02b722c7630db8725cbe493eb3ec08f96b5642 Mon Sep 17 00:00:00 2001 From: Onder Kalaci <onderkalaci@gmail.com> Date: Tue, 8 Dec 2020 16:50:10 +0300 Subject: [PATCH 7/7] Publication where condition support for pg_dump --- src/bin/pg_dump/pg_dump.c | 15 +++++++++++++-- src/bin/pg_dump/pg_dump.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 3b36335aa6..d5ab04179b 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -4071,6 +4071,7 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables) int i_tableoid; int i_oid; int i_pubname; + int i_pubrelqual; int i, j, ntups; @@ -4106,7 +4107,8 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables) /* Get the publication membership for the table. */ appendPQExpBuffer(query, - "SELECT pr.tableoid, pr.oid, p.pubname " + "SELECT pr.tableoid, pr.oid, p.pubname, " + "pg_catalog.pg_get_expr(pr.prqual, pr.prrelid) AS pubrelqual " "FROM pg_publication_rel pr, pg_publication p " "WHERE pr.prrelid = '%u'" " AND p.oid = pr.prpubid", @@ -4127,6 +4129,7 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables) i_tableoid = PQfnumber(res, "tableoid"); i_oid = PQfnumber(res, "oid"); i_pubname = PQfnumber(res, "pubname"); + i_pubrelqual = PQfnumber(res, "pubrelqual"); pubrinfo = pg_malloc(ntups * sizeof(PublicationRelInfo)); @@ -4142,6 +4145,11 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables) pubrinfo[j].pubname = pg_strdup(PQgetvalue(res, j, i_pubname)); pubrinfo[j].pubtable = tbinfo; + if (PQgetisnull(res, j, i_pubrelqual)) + pubrinfo[j].pubrelqual = NULL; + else + pubrinfo[j].pubrelqual = pg_strdup(PQgetvalue(res, j, i_pubrelqual)); + /* Decide whether we want to dump it */ selectDumpablePublicationTable(&(pubrinfo[j].dobj), fout); } @@ -4170,8 +4178,11 @@ dumpPublicationTable(Archive *fout, PublicationRelInfo *pubrinfo) appendPQExpBuffer(query, "ALTER PUBLICATION %s ADD TABLE ONLY", fmtId(pubrinfo->pubname)); - appendPQExpBuffer(query, " %s;\n", + appendPQExpBuffer(query, " %s", fmtQualifiedDumpable(tbinfo)); + if (pubrinfo->pubrelqual) + appendPQExpBuffer(query, " WHERE %s", pubrinfo->pubrelqual); + appendPQExpBufferStr(query, ";\n"); /* * There is no point in creating drop query as the drop is done by table diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 317bb83970..e9472d6986 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -616,6 +616,7 @@ typedef struct _PublicationRelInfo DumpableObject dobj; TableInfo *pubtable; char *pubname; + char *pubrelqual; } PublicationRelInfo; /* -- 2.19.0