From ef4d8c64a48253da5c0c227dcf3a9f659db7ee62 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 4 Apr 2017 09:25:02 -0400 Subject: [PATCH] pg_dump: Dump comments and security labels for publication and subscriptions --- src/bin/pg_dump/pg_dump.c | 28 +++++++++++++++++ src/bin/pg_dump/t/002_pg_dump.pl | 68 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 262f5539bc..18ffd4ca80 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -3457,12 +3457,14 @@ dumpPublication(Archive *fout, PublicationInfo *pubinfo) { PQExpBuffer delq; PQExpBuffer query; + PQExpBuffer labelq; if (!(pubinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)) return; delq = createPQExpBuffer(); query = createPQExpBuffer(); + labelq = createPQExpBuffer(); appendPQExpBuffer(delq, "DROP PUBLICATION %s;\n", fmtId(pubinfo->dobj.name)); @@ -3470,6 +3472,8 @@ dumpPublication(Archive *fout, PublicationInfo *pubinfo) appendPQExpBuffer(query, "CREATE PUBLICATION %s", fmtId(pubinfo->dobj.name)); + appendPQExpBuffer(labelq, "PUBLICATION %s", fmtId(pubinfo->dobj.name)); + if (pubinfo->puballtables) appendPQExpBufferStr(query, " FOR ALL TABLES"); @@ -3501,6 +3505,16 @@ dumpPublication(Archive *fout, PublicationInfo *pubinfo) NULL, 0, NULL, NULL); + if (pubinfo->dobj.dump & DUMP_COMPONENT_COMMENT) + dumpComment(fout, labelq->data, + NULL, pubinfo->rolname, + pubinfo->dobj.catId, 0, pubinfo->dobj.dumpId); + + if (pubinfo->dobj.dump & DUMP_COMPONENT_SECLABEL) + dumpSecLabel(fout, labelq->data, + NULL, pubinfo->rolname, + pubinfo->dobj.catId, 0, pubinfo->dobj.dumpId); + destroyPQExpBuffer(delq); destroyPQExpBuffer(query); } @@ -3726,6 +3740,7 @@ dumpSubscription(Archive *fout, SubscriptionInfo *subinfo) DumpOptions *dopt = fout->dopt; PQExpBuffer delq; PQExpBuffer query; + PQExpBuffer labelq; PQExpBuffer publications; char **pubnames = NULL; int npubnames = 0; @@ -3736,6 +3751,7 @@ dumpSubscription(Archive *fout, SubscriptionInfo *subinfo) delq = createPQExpBuffer(); query = createPQExpBuffer(); + labelq = createPQExpBuffer(); appendPQExpBuffer(delq, "DROP SUBSCRIPTION %s;\n", fmtId(subinfo->dobj.name)); @@ -3779,6 +3795,8 @@ dumpSubscription(Archive *fout, SubscriptionInfo *subinfo) appendPQExpBufferStr(query, ");\n"); + appendPQExpBuffer(labelq, "SUBSCRIPTION %s", fmtId(subinfo->dobj.name)); + ArchiveEntry(fout, subinfo->dobj.catId, subinfo->dobj.dumpId, subinfo->dobj.name, NULL, @@ -3789,6 +3807,16 @@ dumpSubscription(Archive *fout, SubscriptionInfo *subinfo) NULL, 0, NULL, NULL); + if (subinfo->dobj.dump & DUMP_COMPONENT_COMMENT) + dumpComment(fout, labelq->data, + NULL, subinfo->rolname, + subinfo->dobj.catId, 0, subinfo->dobj.dumpId); + + if (subinfo->dobj.dump & DUMP_COMPONENT_SECLABEL) + dumpSecLabel(fout, labelq->data, + NULL, subinfo->rolname, + subinfo->dobj.catId, 0, subinfo->dobj.dumpId); + destroyPQExpBuffer(publications); if (pubnames) free(pubnames); diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 366737440c..b5a2da130a 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -1774,6 +1774,74 @@ section_data => 1, section_post_data => 1, }, }, + 'COMMENT ON PUBLICATION pub1' => { + all_runs => 1, + create_order => 84, + create_sql => 'COMMENT ON PUBLICATION pub1 + IS \'comment on publication\';', + regexp => qr/^COMMENT ON PUBLICATION pub1 IS 'comment on publication';/m, + like => { + binary_upgrade => 1, + clean => 1, + clean_if_exists => 1, + createdb => 1, + defaults => 1, + exclude_dump_test_schema => 1, + exclude_test_table => 1, + exclude_test_table_data => 1, + no_blobs => 1, + no_privs => 1, + no_owner => 1, + pg_dumpall_dbprivs => 1, + schema_only => 1, + section_post_data => 1, + with_oids => 1, }, + unlike => { + column_inserts => 1, + data_only => 1, + only_dump_test_table => 1, + only_dump_test_schema => 1, + pg_dumpall_globals => 1, + pg_dumpall_globals_clean => 1, + role => 1, + section_data => 1, + section_pre_data => 1, + test_schema_plus_blobs => 1, }, }, + + 'COMMENT ON SUBSCRIPTION sub1' => { + all_runs => 1, + create_order => 84, + create_sql => 'COMMENT ON SUBSCRIPTION sub1 + IS \'comment on subscription\';', + regexp => qr/^COMMENT ON SUBSCRIPTION sub1 IS 'comment on subscription';/m, + like => { + binary_upgrade => 1, + clean => 1, + clean_if_exists => 1, + createdb => 1, + defaults => 1, + exclude_dump_test_schema => 1, + exclude_test_table => 1, + exclude_test_table_data => 1, + no_blobs => 1, + no_privs => 1, + no_owner => 1, + pg_dumpall_dbprivs => 1, + schema_only => 1, + section_post_data => 1, + with_oids => 1, }, + unlike => { + column_inserts => 1, + data_only => 1, + only_dump_test_table => 1, + only_dump_test_schema => 1, + pg_dumpall_globals => 1, + pg_dumpall_globals_clean => 1, + role => 1, + section_data => 1, + section_pre_data => 1, + test_schema_plus_blobs => 1, }, }, + 'COMMENT ON TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1' => { all_runs => 1, catch_all => 'COMMENT commands', -- 2.12.2