diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 2f6a6ff..e38cb86 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -2307,12 +2307,17 @@ MergeWithExistingConstraint(Relation rel, char *ccname, Node *expr, (errcode(ERRCODE_DUPLICATE_OBJECT), errmsg("constraint \"%s\" for relation \"%s\" already exists", ccname, RelationGetRelationName(rel)))); - /* OK to update the tuple */ - ereport(NOTICE, - (errmsg("merging constraint \"%s\" with inherited definition", - ccname))); + tup = heap_copytuple(tup); con = (Form_pg_constraint) GETSTRUCT(tup); + + /* If the constraint is "only" then cannot merge */ + if (con->conisonly) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("constraint \"%s\" for relation \"%s\" is an ONLY constraint. Cannot merge", + ccname, RelationGetRelationName(rel)))); + if (is_local) con->conislocal = true; else @@ -2322,6 +2327,10 @@ MergeWithExistingConstraint(Relation rel, char *ccname, Node *expr, Assert(is_local); con->conisonly = true; } + /* OK to update the tuple */ + ereport(NOTICE, + (errmsg("merging constraint \"%s\" with inherited definition", + ccname))); simple_heap_update(conDesc, &tup->t_self, tup); CatalogUpdateIndexes(conDesc, tup); break;