diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-06-27 02:17:47 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-06-27 02:17:47 +0000 |
commit | c3be085ab7a21e01f530357d962fa22f74a637ef (patch) | |
tree | 0aad28a65d7371c2b728ba1f47f19d3772b825a6 /src | |
parent | fc722403a64a09452919a3550a8d0da2df544d6a (diff) | |
download | postgresql-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.c | 23 |
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; |