aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-06-27 02:17:47 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-06-27 02:17:47 +0000
commitc3be085ab7a21e01f530357d962fa22f74a637ef (patch)
tree0aad28a65d7371c2b728ba1f47f19d3772b825a6 /src
parentfc722403a64a09452919a3550a8d0da2df544d6a (diff)
downloadpostgresql-c3be085ab7a21e01f530357d962fa22f74a637ef.tar.gz
postgresql-c3be085ab7a21e01f530357d962fa22f74a637ef.zip
Modify pg_dump to assume that a check constraint is inherited if its
name matches the name of any parent-table constraint, without looking at the constraint text. This is a not-very-bulletproof workaround for the problem exhibited by Berend Tober last month. We really ought to record constraint inheritance status in pg_constraint, but it's looking like that may not get done for 8.1 --- and even if it does, we will need this kluge for dumping from older servers.
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/common.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index 64090639256..56f7665f5f8 100644
--- a/src/bin/pg_dump/common.c
+++ b/src/bin/pg_dump/common.c
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/common.c,v 1.85 2004/12/31 22:03:07 pgsql Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/common.c,v 1.86 2005/06/27 02:17:47 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -347,8 +347,14 @@ flagInhAttrs(TableInfo *tblinfo, int numTables,
/*
* Check for inherited CHECK constraints. We assume a constraint
- * is inherited if its expression matches the parent and the name
- * is the same, *or* both names start with '$'.
+ * is inherited if its name matches the name of any constraint in
+ * the parent. Originally this code tried to compare the expression
+ * texts, but that can fail if the parent and child tables are in
+ * different schemas, because reverse-listing of function calls may
+ * produce different text (schema-qualified or not) depending on
+ * search path. We really need a more bulletproof way of detecting
+ * inherited constraints --- pg_constraint should record this
+ * explicitly!
*/
for (j = 0; j < tbinfo->ncheck; j++)
{
@@ -363,14 +369,9 @@ flagInhAttrs(TableInfo *tblinfo, int numTables,
parent = parents[k];
for (l = 0; l < parent->ncheck; l++)
{
- ConstraintInfo *pconstr;
-
- pconstr = &(parent->checkexprs[l]);
- if (strcmp(pconstr->condef, constr->condef) != 0)
- continue;
- if (strcmp(pconstr->dobj.name, constr->dobj.name) == 0 ||
- (pconstr->dobj.name[0] == '$' &&
- constr->dobj.name[0] == '$'))
+ ConstraintInfo *pconstr = &(parent->checkexprs[l]);
+
+ if (strcmp(pconstr->dobj.name, constr->dobj.name) == 0)
{
constr->coninherited = true;
break;