提交 c3be085a 编写于 作者: T Tom Lane

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.
上级 fc722403
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册