diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index fb85685fbc14ff761a6403d75f8859022f8c6417..22e263b7b258f8f389db3f02b0e0efa3cbcc103f 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -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 diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index c4a79aa054af3aa7258c0b2664e61322b5be6327..3ec4893606e225e8fdadcc8719f9ae5a3a911e36 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -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",