mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
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.
This commit is contained in:
@ -11,7 +11,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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
|
* Check for inherited CHECK constraints. We assume a constraint
|
||||||
* is inherited if its expression matches the parent and the name
|
* is inherited if its name matches the name of any constraint in
|
||||||
* is the same, *or* both names start with '$'.
|
* 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++)
|
for (j = 0; j < tbinfo->ncheck; j++)
|
||||||
{
|
{
|
||||||
@ -363,14 +369,9 @@ flagInhAttrs(TableInfo *tblinfo, int numTables,
|
|||||||
parent = parents[k];
|
parent = parents[k];
|
||||||
for (l = 0; l < parent->ncheck; l++)
|
for (l = 0; l < parent->ncheck; l++)
|
||||||
{
|
{
|
||||||
ConstraintInfo *pconstr;
|
ConstraintInfo *pconstr = &(parent->checkexprs[l]);
|
||||||
|
|
||||||
pconstr = &(parent->checkexprs[l]);
|
if (strcmp(pconstr->dobj.name, constr->dobj.name) == 0)
|
||||||
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] == '$'))
|
|
||||||
{
|
{
|
||||||
constr->coninherited = true;
|
constr->coninherited = true;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user