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 (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to