]> granicus.if.org Git - postgresql/commitdiff
Modify pg_dump to assume that a check constraint is inherited if its
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Jun 2005 02:17:47 +0000 (02:17 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Jun 2005 02:17:47 +0000 (02:17 +0000)
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.

src/bin/pg_dump/common.c

index 6409063925697c09c8df99c8525fc3d384e31645..56f7665f5f89bf74714bc52ad22435477d7e87a5 100644 (file)
@@ -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;