Don't dump CHECK constraints with same source and names both

starting with '$'.
This commit is contained in:
Philip Warner 2001-04-04 06:47:30 +00:00
parent 1d9819d69e
commit a51d560d94
2 changed files with 30 additions and 61 deletions

View File

@ -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

View File

@ -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,
@ -2140,7 +2101,10 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
" 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 "
" or ( c.rcname[0] = '$' "
" and pg_relcheck.rcname[0] = '$')"
" )"
" and c.rcsrc = pg_relcheck.rcsrc " " and c.rcsrc = pg_relcheck.rcsrc "
" and c.rcrelid = i.inhparent) " " and c.rcrelid = i.inhparent) "
" Order By oid ", " Order By oid ",
@ -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",