Skip to content

Commit a51d560

Browse files
committed
Don't dump CHECK constraints with same source and names both
starting with '$'.
1 parent 1d9819d commit a51d560

File tree

2 files changed

+30
-61
lines changed

2 files changed

+30
-61
lines changed

src/bin/pg_dump/pg_backup_archiver.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*
1818
*
1919
* IDENTIFICATION
20-
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.29 2001/04/03 08:52:59 pjw Exp $
20+
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.30 2001/04/04 06:47:30 pjw Exp $
2121
*
2222
* Modifications - 28-Jun-2000 - pjw@rhyme.com.au
2323
* - Initial version.
@@ -68,7 +68,7 @@ typedef z_stream *z_streamp;
6868

6969
#define K_VERS_MAJOR 1
7070
#define K_VERS_MINOR 5
71-
#define K_VERS_REV 1
71+
#define K_VERS_REV 2
7272

7373
/* Data block types */
7474
#define BLK_DATA 1

src/bin/pg_dump/pg_dump.c

Lines changed: 28 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
*
2323
*
2424
* IDENTIFICATION
25-
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.199 2001/04/03 08:52:59 pjw Exp $
25+
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.200 2001/04/04 06:47:30 pjw Exp $
2626
*
2727
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
2828
*
@@ -122,6 +122,11 @@
122122
* OID of the type functions, but type must be created after
123123
* the functions.
124124
*
125+
* Modifications - 4-Apr-2001 - pjw@rhyme.com.au
126+
*
127+
* - Don't dump CHECK constraints with same source and names both
128+
* starting with '$'.
129+
*
125130
*-------------------------------------------------------------------------
126131
*/
127132

@@ -2068,59 +2073,15 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
20682073
else
20692074
tblinfo[i].viewdef = NULL;
20702075

2071-
/*
2076+
/*
2077+
* Get non-inherited CHECK constraints, if any.
2078+
*
20722079
* Exclude inherited CHECKs from CHECK constraints total. If a
20732080
* constraint matches by name and condition with a constraint
2074-
* belonging to a parent class, we assume it was inherited.
2081+
* belonging to a parent class (OR conditions match and both
2082+
* names start with '$', we assume it was inherited.
20752083
*/
20762084
if (tblinfo[i].ncheck > 0)
2077-
{
2078-
PGresult *res2;
2079-
int ntups2;
2080-
2081-
if (g_verbose)
2082-
fprintf(stderr, "%s excluding inherited CHECK constraints "
2083-
"for relation: '%s' %s\n",
2084-
g_comment_start,
2085-
tblinfo[i].relname,
2086-
g_comment_end);
2087-
2088-
/*
2089-
* XXXX: Use LOJ maybe - need to compare with subsequent query
2090-
* for non-inherited
2091-
*/
2092-
resetPQExpBuffer(query);
2093-
appendPQExpBuffer(query, "SELECT rcname from pg_relcheck, pg_inherits as i "
2094-
"where rcrelid = '%s'::oid "
2095-
" and rcrelid = i.inhrelid"
2096-
" and exists "
2097-
" (select * from pg_relcheck as c "
2098-
" where c.rcname = pg_relcheck.rcname "
2099-
" and c.rcsrc = pg_relcheck.rcsrc "
2100-
" and c.rcrelid = i.inhparent) ",
2101-
tblinfo[i].oid);
2102-
res2 = PQexec(g_conn, query->data);
2103-
if (!res2 ||
2104-
PQresultStatus(res2) != PGRES_TUPLES_OK)
2105-
{
2106-
fprintf(stderr, "getTables(): SELECT (for inherited CHECK) failed. "
2107-
"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
2108-
exit_nicely(g_conn);
2109-
}
2110-
ntups2 = PQntuples(res2);
2111-
tblinfo[i].ncheck -= ntups2;
2112-
if (tblinfo[i].ncheck < 0)
2113-
{
2114-
fprintf(stderr, "getTables(): found more inherited CHECKs than total for "
2115-
"relation %s\n",
2116-
tblinfo[i].relname);
2117-
exit_nicely(g_conn);
2118-
}
2119-
PQclear(res2);
2120-
}
2121-
2122-
/* Get non-inherited CHECK constraints, if any */
2123-
if (tblinfo[i].ncheck > 0)
21242085
{
21252086
PGresult *res2;
21262087
int i_rcname,
@@ -2136,13 +2097,16 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
21362097

21372098
resetPQExpBuffer(query);
21382099
appendPQExpBuffer(query, "SELECT rcname, rcsrc from pg_relcheck "
2139-
"where rcrelid = '%s'::oid "
2100+
" where rcrelid = '%s'::oid "
21402101
" and not exists "
2141-
" (select * from pg_relcheck as c, pg_inherits as i "
2142-
" where i.inhrelid = pg_relcheck.rcrelid "
2143-
" and c.rcname = pg_relcheck.rcname "
2144-
" and c.rcsrc = pg_relcheck.rcsrc "
2145-
" and c.rcrelid = i.inhparent) "
2102+
" (select * from pg_relcheck as c, pg_inherits as i "
2103+
" where i.inhrelid = pg_relcheck.rcrelid "
2104+
" and (c.rcname = pg_relcheck.rcname "
2105+
" or ( c.rcname[0] = '$' "
2106+
" and pg_relcheck.rcname[0] = '$')"
2107+
" )"
2108+
" and c.rcsrc = pg_relcheck.rcsrc "
2109+
" and c.rcrelid = i.inhparent) "
21462110
" Order By oid ",
21472111
tblinfo[i].oid);
21482112
res2 = PQexec(g_conn, query->data);
@@ -2154,12 +2118,17 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
21542118
exit_nicely(g_conn);
21552119
}
21562120
ntups2 = PQntuples(res2);
2157-
if (ntups2 != tblinfo[i].ncheck)
2121+
if (ntups2 > tblinfo[i].ncheck)
21582122
{
2159-
fprintf(stderr, "getTables(): relation '%s': %d CHECKs were expected, but got %d\n",
2123+
fprintf(stderr, "getTables(): relation '%s': a maximum of %d CHECKs "
2124+
"were expected, but got %d\n",
21602125
tblinfo[i].relname, tblinfo[i].ncheck, ntups2);
21612126
exit_nicely(g_conn);
21622127
}
2128+
2129+
/* Set ncheck to the number of *non-inherited* CHECK constraints */
2130+
tblinfo[i].ncheck = ntups2;
2131+
21632132
i_rcname = PQfnumber(res2, "rcname");
21642133
i_rcsrc = PQfnumber(res2, "rcsrc");
21652134
tblinfo[i].check_expr = (char **) malloc(ntups2 * sizeof(char *));
@@ -3897,7 +3866,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
38973866

38983867
if (numParents > 0)
38993868
{
3900-
appendPQExpBuffer(q, "\ninherits (");
3869+
appendPQExpBuffer(q, "\nINHERITS (");
39013870
for (k = 0; k < numParents; k++)
39023871
{
39033872
appendPQExpBuffer(q, "%s%s",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy