On 08/02/17 05:02, Stephen Frost wrote: > Peter, > > On Tue, Feb 7, 2017 at 22:49 Peter Eisentraut > <peter.eisentr...@2ndquadrant.com > <mailto:peter.eisentr...@2ndquadrant.com>> wrote: > > On 2/7/17 3:19 PM, Stephen Frost wrote: > > I understand that this is a bit complicated, but I would have thought > > we'd do something similar to what is done for DEFAULT PRIVILEGES, > where > > we include the "global" default privileges when we are doing a dump of > > "everything", but if we're dumping a specific schema then we only > > include the default privileges directly associated with that schema. > > > > Perhaps we need to include publications which are specific to a > > particular table, but the current logic of, essentially, "always > include > > all publications" does not seem to make a lot of sense to me. > > I think it would be sensible to refine it along those lines. > > > Great! I've added it to the open items list for PG10. >
Yeah that was oversight in initial patch, publications and their membership was supposed to be dumped only when table filter is not used. I mistakenly made it check for data_only instead of using the selectDumpableObject machinery. Fix attached. -- Petr Jelinek http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
From 907dcca71712558ba954a28cdf65ccdd77473bfe Mon Sep 17 00:00:00 2001 From: Petr Jelinek <pjmo...@pjmodos.net> Date: Sun, 26 Feb 2017 20:12:26 +0100 Subject: [PATCH] Don't dump publications with pg_dump -t --- src/bin/pg_dump/pg_dump.c | 29 +++++++++++++++++++++++++---- src/bin/pg_dump/t/002_pg_dump.pl | 17 +++++++++-------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 7273ec8..8f7245d 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -1613,6 +1613,23 @@ selectDumpableExtension(ExtensionInfo *extinfo, DumpOptions *dopt) } /* + * selectDumpablePublicationTable: policy-setting subroutine + * Mark a publication table as to be dumped or not + * + * Publication tables have schemas but those should be ignored in decitions + * making as publications are only dumped when we are dumping everything. + */ +static void +selectDumpablePublicationTable(DumpableObject *dobj, Archive *fout) +{ + if (checkExtensionMembership(dobj, fout)) + return; /* extension membership overrides all else */ + + dobj->dump = fout->dopt->include_everything ? + DUMP_COMPONENT_ALL : DUMP_COMPONENT_NONE; +} + +/* * selectDumpableObject: policy-setting subroutine * Mark a generic dumpable object as to be dumped or not * @@ -3389,6 +3406,9 @@ getPublications(Archive *fout) if (strlen(pubinfo[i].rolname) == 0) write_msg(NULL, "WARNING: owner of publication \"%s\" appears to be invalid\n", pubinfo[i].dobj.name); + + /* Decide whether we want to dump it */ + selectDumpableObject(&(pubinfo[i].dobj), fout); } PQclear(res); @@ -3402,11 +3422,10 @@ getPublications(Archive *fout) static void dumpPublication(Archive *fout, PublicationInfo *pubinfo) { - DumpOptions *dopt = fout->dopt; PQExpBuffer delq; PQExpBuffer query; - if (dopt->dataOnly) + if (!(pubinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)) return; delq = createPQExpBuffer(); @@ -3534,6 +3553,9 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables) pubrinfo[j].dobj.namespace = tbinfo->dobj.namespace; pubrinfo[j].pubname = pg_strdup(PQgetvalue(res, j, i_pubname)); pubrinfo[j].pubtable = tbinfo; + + /* Decide whether we want to dump it */ + selectDumpablePublicationTable(&(pubrinfo[j].dobj), fout); } PQclear(res); } @@ -3547,12 +3569,11 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables) static void dumpPublicationTable(Archive *fout, PublicationRelInfo *pubrinfo) { - DumpOptions *dopt = fout->dopt; TableInfo *tbinfo = pubrinfo->pubtable; PQExpBuffer query; char *tag; - if (dopt->dataOnly) + if (!(pubrinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)) return; tag = psprintf("%s %s", pubrinfo->pubname, tbinfo->dobj.name); diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index f73bf89..40509a4 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -2242,14 +2242,14 @@ qr/CREATE TRANSFORM FOR integer LANGUAGE sql \(FROM SQL WITH FUNCTION pg_catalog exclude_test_table => 1, no_privs => 1, no_owner => 1, - only_dump_test_schema => 1, - only_dump_test_table => 1, pg_dumpall_dbprivs => 1, schema_only => 1, - section_post_data => 1, - test_schema_plus_blobs => 1, }, + section_post_data => 1, }, unlike => { section_pre_data => 1, + only_dump_test_table => 1, + test_schema_plus_blobs => 1, + only_dump_test_schema => 1, pg_dumpall_globals => 1, pg_dumpall_globals_clean => 1, }, }, 'ALTER PUBLICATION pub1 ADD TABLE test_table' => { @@ -2268,16 +2268,17 @@ qr/CREATE TRANSFORM FOR integer LANGUAGE sql \(FROM SQL WITH FUNCTION pg_catalog exclude_test_table_data => 1, no_privs => 1, no_owner => 1, - only_dump_test_schema => 1, - only_dump_test_table => 1, pg_dumpall_dbprivs => 1, schema_only => 1, - section_post_data => 1, - test_schema_plus_blobs => 1, }, + section_post_data => 1, }, unlike => { section_pre_data => 1, exclude_dump_test_schema => 1, exclude_test_table => 1, + only_dump_test_schema => 1, + only_dump_test_table => 1, + only_dump_test_table => 1, + test_schema_plus_blobs => 1, pg_dumpall_globals => 1, pg_dumpall_globals_clean => 1, }, }, -- 2.7.4
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers