mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	Don't dump CHECK constraints with same source and names both
starting with '$'.
This commit is contained in:
		| @@ -17,7 +17,7 @@ | |||||||
|  * |  * | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.29 2001/04/03 08:52:59 pjw Exp $ |  *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.30 2001/04/04 06:47:30 pjw Exp $ | ||||||
|  * |  * | ||||||
|  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au |  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au | ||||||
|  *	-	Initial version. |  *	-	Initial version. | ||||||
| @@ -68,7 +68,7 @@ typedef z_stream *z_streamp; | |||||||
|  |  | ||||||
| #define K_VERS_MAJOR 1 | #define K_VERS_MAJOR 1 | ||||||
| #define K_VERS_MINOR 5 | #define K_VERS_MINOR 5 | ||||||
| #define K_VERS_REV 1  | #define K_VERS_REV 2  | ||||||
|  |  | ||||||
| /* Data block types */ | /* Data block types */ | ||||||
| #define BLK_DATA 1 | #define BLK_DATA 1 | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ | |||||||
|  * |  * | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.199 2001/04/03 08:52:59 pjw Exp $ |  *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.200 2001/04/04 06:47:30 pjw Exp $ | ||||||
|  * |  * | ||||||
|  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb |  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb | ||||||
|  * |  * | ||||||
| @@ -122,6 +122,11 @@ | |||||||
|  *		OID of the type functions, but type must be created after  |  *		OID of the type functions, but type must be created after  | ||||||
|  *		the functions. |  *		the functions. | ||||||
|  * |  * | ||||||
|  |  * Modifications - 4-Apr-2001 - pjw@rhyme.com.au | ||||||
|  |  * | ||||||
|  |  *	  - Don't dump CHECK constraints with same source and names both | ||||||
|  |  *		starting with '$'. | ||||||
|  |  * | ||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -2069,58 +2074,14 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) | |||||||
| 			tblinfo[i].viewdef = NULL; | 			tblinfo[i].viewdef = NULL; | ||||||
|  |  | ||||||
| 		/*  | 		/*  | ||||||
|  | 		 * Get non-inherited CHECK constraints, if any. | ||||||
|  | 		 * | ||||||
| 		 * Exclude inherited CHECKs from CHECK constraints total. If a | 		 * Exclude inherited CHECKs from CHECK constraints total. If a | ||||||
| 		 * constraint matches by name and condition with a constraint | 		 * constraint matches by name and condition with a constraint | ||||||
| 		 * belonging to a parent class, we assume it was inherited. | 		 * belonging to a parent class (OR conditions match and both | ||||||
|  | 	     * names start with '$', we assume it was inherited. | ||||||
| 		 */ | 		 */ | ||||||
| 		if (tblinfo[i].ncheck > 0) | 		if (tblinfo[i].ncheck > 0) | ||||||
| 		{ |  | ||||||
| 			PGresult   *res2; |  | ||||||
| 			int			ntups2; |  | ||||||
|  |  | ||||||
| 			if (g_verbose) |  | ||||||
| 				fprintf(stderr, "%s excluding inherited CHECK constraints " |  | ||||||
| 						"for relation: '%s' %s\n", |  | ||||||
| 						g_comment_start, |  | ||||||
| 						tblinfo[i].relname, |  | ||||||
| 						g_comment_end); |  | ||||||
|  |  | ||||||
| 			/* |  | ||||||
| 			 * XXXX: Use LOJ maybe - need to compare with subsequent query |  | ||||||
| 			 * for non-inherited |  | ||||||
| 			 */ |  | ||||||
| 			resetPQExpBuffer(query); |  | ||||||
| 			appendPQExpBuffer(query, "SELECT rcname from pg_relcheck, pg_inherits as i " |  | ||||||
| 							  "where rcrelid = '%s'::oid " |  | ||||||
| 							  " and rcrelid = i.inhrelid" |  | ||||||
| 							  " and exists " |  | ||||||
| 							  "  (select * from pg_relcheck as c " |  | ||||||
| 							  "    where c.rcname = pg_relcheck.rcname " |  | ||||||
| 							  "      and c.rcsrc = pg_relcheck.rcsrc " |  | ||||||
| 							  "      and c.rcrelid = i.inhparent) ", |  | ||||||
| 							  tblinfo[i].oid); |  | ||||||
| 			res2 = PQexec(g_conn, query->data); |  | ||||||
| 			if (!res2 || |  | ||||||
| 				PQresultStatus(res2) != PGRES_TUPLES_OK) |  | ||||||
| 			{ |  | ||||||
| 				fprintf(stderr, "getTables(): SELECT (for inherited CHECK) failed.  " |  | ||||||
| 						"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn)); |  | ||||||
| 				exit_nicely(g_conn); |  | ||||||
| 			} |  | ||||||
| 			ntups2 = PQntuples(res2); |  | ||||||
| 			tblinfo[i].ncheck -= ntups2; |  | ||||||
| 			if (tblinfo[i].ncheck < 0) |  | ||||||
| 			{ |  | ||||||
| 				fprintf(stderr, "getTables(): found more inherited CHECKs than total for " |  | ||||||
| 						"relation %s\n", |  | ||||||
| 						tblinfo[i].relname); |  | ||||||
| 				exit_nicely(g_conn); |  | ||||||
| 			} |  | ||||||
| 			PQclear(res2); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		/* Get non-inherited CHECK constraints, if any */ |  | ||||||
| 		if (tblinfo[i].ncheck > 0) |  | ||||||
| 		{ | 		{ | ||||||
| 			PGresult   *res2; | 			PGresult   *res2; | ||||||
| 			int			i_rcname, | 			int			i_rcname, | ||||||
| @@ -2136,13 +2097,16 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) | |||||||
|  |  | ||||||
| 			resetPQExpBuffer(query); | 			resetPQExpBuffer(query); | ||||||
| 			appendPQExpBuffer(query, "SELECT rcname, rcsrc from pg_relcheck " | 			appendPQExpBuffer(query, "SELECT rcname, rcsrc from pg_relcheck " | ||||||
| 							  "where rcrelid = '%s'::oid " | 							  " where rcrelid = '%s'::oid " | ||||||
| 							  "   and not exists " | 							  "   and not exists " | ||||||
| 				   "  (select * from pg_relcheck as c, pg_inherits as i " | 							  "  (select * from pg_relcheck as c, pg_inherits as i " | ||||||
| 							  "   where i.inhrelid = pg_relcheck.rcrelid " | 							  "    where i.inhrelid = pg_relcheck.rcrelid " | ||||||
| 							  "     and c.rcname = pg_relcheck.rcname " | 							  "      and (c.rcname = pg_relcheck.rcname " | ||||||
| 							  "     and c.rcsrc = pg_relcheck.rcsrc " | 							  "          or (    c.rcname[0] = '$' " | ||||||
| 							  "     and c.rcrelid = i.inhparent) " | 							  "              and pg_relcheck.rcname[0] = '$')" | ||||||
|  | 							  "          )" | ||||||
|  | 							  "      and c.rcsrc = pg_relcheck.rcsrc " | ||||||
|  | 							  "      and c.rcrelid = i.inhparent) " | ||||||
| 							  " Order By oid ", | 							  " Order By oid ", | ||||||
| 							  tblinfo[i].oid); | 							  tblinfo[i].oid); | ||||||
| 			res2 = PQexec(g_conn, query->data); | 			res2 = PQexec(g_conn, query->data); | ||||||
| @@ -2154,12 +2118,17 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) | |||||||
| 				exit_nicely(g_conn); | 				exit_nicely(g_conn); | ||||||
| 			} | 			} | ||||||
| 			ntups2 = PQntuples(res2); | 			ntups2 = PQntuples(res2); | ||||||
| 			if (ntups2 != tblinfo[i].ncheck) | 			if (ntups2 > tblinfo[i].ncheck) | ||||||
| 			{ | 			{ | ||||||
| 				fprintf(stderr, "getTables(): relation '%s': %d CHECKs were expected, but got %d\n", | 				fprintf(stderr, "getTables(): relation '%s': a maximum of %d CHECKs " | ||||||
|  | 									"were expected, but got %d\n", | ||||||
| 						tblinfo[i].relname, tblinfo[i].ncheck, ntups2); | 						tblinfo[i].relname, tblinfo[i].ncheck, ntups2); | ||||||
| 				exit_nicely(g_conn); | 				exit_nicely(g_conn); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			/* Set ncheck to the number of *non-inherited* CHECK constraints */ | ||||||
|  | 			tblinfo[i].ncheck = ntups2; | ||||||
|  |  | ||||||
| 			i_rcname = PQfnumber(res2, "rcname"); | 			i_rcname = PQfnumber(res2, "rcname"); | ||||||
| 			i_rcsrc = PQfnumber(res2, "rcsrc"); | 			i_rcsrc = PQfnumber(res2, "rcsrc"); | ||||||
| 			tblinfo[i].check_expr = (char **) malloc(ntups2 * sizeof(char *)); | 			tblinfo[i].check_expr = (char **) malloc(ntups2 * sizeof(char *)); | ||||||
| @@ -3897,7 +3866,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables, | |||||||
|  |  | ||||||
| 				if (numParents > 0) | 				if (numParents > 0) | ||||||
| 				{ | 				{ | ||||||
| 					appendPQExpBuffer(q, "\ninherits ("); | 					appendPQExpBuffer(q, "\nINHERITS ("); | ||||||
| 					for (k = 0; k < numParents; k++) | 					for (k = 0; k < numParents; k++) | ||||||
| 					{ | 					{ | ||||||
| 						appendPQExpBuffer(q, "%s%s", | 						appendPQExpBuffer(q, "%s%s", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user