diff options
author | Joe Conway <mail@joeconway.com> | 2013-04-26 11:54:59 -0700 |
---|---|---|
committer | Joe Conway <mail@joeconway.com> | 2013-04-26 12:03:11 -0700 |
commit | 359c8e4545a0d67465205353bd0b086aedbf5293 (patch) | |
tree | 2c38e07477b245c408fdfd732967026f8b166bfc | |
parent | 32ad1d696a0e7b50074d57b25708ffd1dc82600f (diff) |
Ensure that user created rows in extension tables get dumped if the table is explicitly requested, either with a -t/--table switch of the table itself, or by -n/--schema switch of the schema containing the extension table. Patch reviewed by Vibhor Kumar and Dimitri Fontaine.
Backpatched to 9.1 when the extension management facility was added.
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index c7a5abd5e4c..6459e636d12 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -13885,10 +13885,6 @@ getExtensionMembership(ExtensionInfo extinfo[], int numExtensions) int nconfigitems; int nconditionitems; - /* Tables of not-to-be-dumped extensions shouldn't be dumped */ - if (!curext->dobj.dump) - continue; - if (parsePGArray(extconfig, &extconfigarray, &nconfigitems) && parsePGArray(extcondition, &extconditionarray, &nconditionitems) && nconfigitems == nconditionitems) @@ -13898,18 +13894,51 @@ getExtensionMembership(ExtensionInfo extinfo[], int numExtensions) for (j = 0; j < nconfigitems; j++) { TableInfo *configtbl; + Oid configtbloid = atooid(extconfigarray[j]); + bool dumpobj = curext->dobj.dump; - configtbl = findTableByOid(atooid(extconfigarray[j])); + configtbl = findTableByOid(configtbloid); if (configtbl && configtbl->dataObj == NULL) { /* - * Note: config tables are dumped without OIDs regardless - * of the --oids setting. This is because row filtering - * conditions aren't compatible with dumping OIDs. + * Tables of not-to-be-dumped extensions shouldn't be dumped + * unless the table or its schema is explicitly included */ - makeTableDataInfo(configtbl, false); - if (strlen(extconditionarray[j]) > 0) - configtbl->dataObj->filtercond = strdup(extconditionarray[j]); + if (!curext->dobj.dump) + { + /* check table explicitly requested */ + if (table_include_oids.head != NULL && + simple_oid_list_member(&table_include_oids, + configtbloid)) + dumpobj = true; + + /* check table's schema explicitly requested */ + if (configtbl->dobj.namespace->dobj.dump) + dumpobj = true; + } + + /* check table excluded by an exclusion switch */ + if (table_exclude_oids.head != NULL && + simple_oid_list_member(&table_exclude_oids, + configtbloid)) + dumpobj = false; + + /* check schema excluded by an exclusion switch */ + if (simple_oid_list_member(&schema_exclude_oids, + configtbl->dobj.namespace->dobj.catId.oid)) + dumpobj = false; + + if (dumpobj) + { + /* + * Note: config tables are dumped without OIDs regardless + * of the --oids setting. This is because row filtering + * conditions aren't compatible with dumping OIDs. + */ + makeTableDataInfo(configtbl, false); + if (strlen(extconditionarray[j]) > 0) + configtbl->dataObj->filtercond = strdup(extconditionarray[j]); + } } } } |