On 03/25/2013 08:12 AM, Vibhor Kumar wrote:
> Since, nobody has picked this one.
>
> If there is no objection,then I can test this patch against 9.1 & 9.2.
Here are diffs for 9.1 and 9.2. The previous email was against 9.3 dev.
Joe
--
Joe Conway
credativ LLC: http://www.credativ.us
Linux, PostgreSQL, and general Open Source
Training, Service, Consulting, & 24x7 Support
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 964823f..4e0b45c 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -13883,10 +13883,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)
@@ -13896,18 +13892,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]);
+ }
}
}
}
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 1fe9d75..9f6fd2e 100644
*** a/src/bin/pg_dump/pg_dump.c
--- b/src/bin/pg_dump/pg_dump.c
*************** getExtensionMembership(Archive *fout, Ex
*** 14022,14031 ****
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)
--- 14022,14027 ----
*************** getExtensionMembership(Archive *fout, Ex
*** 14035,14055 ****
for (j = 0; j < nconfigitems; j++)
{
TableInfo *configtbl;
! configtbl = findTableByOid(atooid(extconfigarray[j]));
if (configtbl == NULL)
continue;
/*
! * 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 (configtbl->dataObj != NULL)
{
! if (strlen(extconditionarray[j]) > 0)
! configtbl->dataObj->filtercond = pg_strdup(extconditionarray[j]);
}
}
}
--- 14031,14084 ----
for (j = 0; j < nconfigitems; j++)
{
TableInfo *configtbl;
+ Oid configtbloid = atooid(extconfigarray[j]);
+ bool dumpobj = curext->dobj.dump;
! configtbl = findTableByOid(configtbloid);
if (configtbl == NULL)
continue;
/*
! * Tables of not-to-be-dumped extensions shouldn't be dumped
! * unless the table or its schema is explicitly included
*/
! 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 (configtbl->dataObj != NULL)
! {
! if (strlen(extconditionarray[j]) > 0)
! configtbl->dataObj->filtercond = pg_strdup(extconditionarray[j]);
! }
}
}
}
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers