mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
Don't dump CHECK constraints with same source and names both
starting with '$'.
This commit is contained in:
parent
1d9819d69e
commit
a51d560d94
@ -17,7 +17,7 @@
|
||||
*
|
||||
*
|
||||
* 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
|
||||
* - Initial version.
|
||||
@ -68,7 +68,7 @@ typedef z_stream *z_streamp;
|
||||
|
||||
#define K_VERS_MAJOR 1
|
||||
#define K_VERS_MINOR 5
|
||||
#define K_VERS_REV 1
|
||||
#define K_VERS_REV 2
|
||||
|
||||
/* Data block types */
|
||||
#define BLK_DATA 1
|
||||
|
@ -22,7 +22,7 @@
|
||||
*
|
||||
*
|
||||
* 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
|
||||
*
|
||||
@ -122,6 +122,11 @@
|
||||
* OID of the type functions, but type must be created after
|
||||
* the functions.
|
||||
*
|
||||
* Modifications - 4-Apr-2001 - pjw@rhyme.com.au
|
||||
*
|
||||
* - Don't dump CHECK constraints with same source and names both
|
||||
* starting with '$'.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@ -2068,59 +2073,15 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
else
|
||||
tblinfo[i].viewdef = NULL;
|
||||
|
||||
/*
|
||||
/*
|
||||
* Get non-inherited CHECK constraints, if any.
|
||||
*
|
||||
* Exclude inherited CHECKs from CHECK constraints total. If a
|
||||
* 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)
|
||||
{
|
||||
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;
|
||||
int i_rcname,
|
||||
@ -2136,13 +2097,16 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
|
||||
resetPQExpBuffer(query);
|
||||
appendPQExpBuffer(query, "SELECT rcname, rcsrc from pg_relcheck "
|
||||
"where rcrelid = '%s'::oid "
|
||||
" where rcrelid = '%s'::oid "
|
||||
" and not exists "
|
||||
" (select * from pg_relcheck as c, pg_inherits as i "
|
||||
" where i.inhrelid = pg_relcheck.rcrelid "
|
||||
" and c.rcname = pg_relcheck.rcname "
|
||||
" and c.rcsrc = pg_relcheck.rcsrc "
|
||||
" and c.rcrelid = i.inhparent) "
|
||||
" (select * from pg_relcheck as c, pg_inherits as i "
|
||||
" where i.inhrelid = pg_relcheck.rcrelid "
|
||||
" and (c.rcname = pg_relcheck.rcname "
|
||||
" or ( c.rcname[0] = '$' "
|
||||
" and pg_relcheck.rcname[0] = '$')"
|
||||
" )"
|
||||
" and c.rcsrc = pg_relcheck.rcsrc "
|
||||
" and c.rcrelid = i.inhparent) "
|
||||
" Order By oid ",
|
||||
tblinfo[i].oid);
|
||||
res2 = PQexec(g_conn, query->data);
|
||||
@ -2154,12 +2118,17 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
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);
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
|
||||
/* Set ncheck to the number of *non-inherited* CHECK constraints */
|
||||
tblinfo[i].ncheck = ntups2;
|
||||
|
||||
i_rcname = PQfnumber(res2, "rcname");
|
||||
i_rcsrc = PQfnumber(res2, "rcsrc");
|
||||
tblinfo[i].check_expr = (char **) malloc(ntups2 * sizeof(char *));
|
||||
@ -3897,7 +3866,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
|
||||
|
||||
if (numParents > 0)
|
||||
{
|
||||
appendPQExpBuffer(q, "\ninherits (");
|
||||
appendPQExpBuffer(q, "\nINHERITS (");
|
||||
for (k = 0; k < numParents; k++)
|
||||
{
|
||||
appendPQExpBuffer(q, "%s%s",
|
||||
|
Loading…
x
Reference in New Issue
Block a user