From 7c9b9d262191a26670230592cceb8c6c17dd5775 Mon Sep 17 00:00:00 2001 From: jian he Date: Mon, 8 Jun 2026 18:22:55 +0800 Subject: [PATCH v8 1/1] Minor refactoring for v8: * Avoid some unnecessary work in ATCheckCheckConstrHasEnforcedParent(). * Add check_stack_depth() to ATCheckCheckConstrHasEnforcedParent(), since it's recursive. * Keep errmsg() messages on a single line to improve grepability. --- src/backend/commands/tablecmds.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 35afff39da9..da28e0f8cb4 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -12727,8 +12727,7 @@ ATExecAlterCheckConstrEnforceability(List **wqueue, ATAlterConstraint *cmdcon, if (!recursing) ereport(ERROR, errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("cannot mark inherited constraint \"%s\" as NOT ENFORCED because " - "matching constraint on parent table \"%s\" is ENFORCED", + errmsg("cannot mark inherited constraint \"%s\" as NOT ENFORCED because matching constraint on parent table \"%s\" is ENFORCED", NameStr(currcon->conname), get_rel_name(enforced_parentoid))); @@ -12929,6 +12928,8 @@ ATCheckCheckConstrHasEnforcedParent(Relation conrel, Relation rel, currcon = (Form_pg_constraint) GETSTRUCT(contuple); Assert(currcon->contype == CONSTRAINT_CHECK); + check_stack_depth(); + if (currcon->coninhcount <= 0) return false; @@ -12947,8 +12948,10 @@ ATCheckCheckConstrHasEnforcedParent(Relation conrel, Relation rel, SysScanDesc pscan; ScanKeyData pkey[3]; HeapTuple parenttup; + Relation parentrel; parentoid = ((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhparent; + parentrel = table_open(parentoid, AccessShareLock); ScanKeyInit(&pkey[0], Anum_pg_constraint_conrelid, @@ -12991,31 +12994,27 @@ ATCheckCheckConstrHasEnforcedParent(Relation conrel, Relation rel, if (!rel->rd_rel->relispartition && list_member_oid(changing_conids, parentcon->oid)) { - Relation parentrel; Oid parent_enforced_parentoid = InvalidOid; - parentrel = table_open(parentoid, NoLock); - if (!ATCheckCheckConstrHasEnforcedParent(conrel, parentrel, parenttup, changing_conids, &parent_enforced_parentoid)) { - table_close(parentrel, NoLock); continue; } - - table_close(parentrel, NoLock); } *enforced_parentoid = parentoid; systable_endscan(pscan); systable_endscan(scan); table_close(inhrel, AccessShareLock); + table_close(parentrel, AccessShareLock); return true; } } + table_close(parentrel, AccessShareLock); systable_endscan(pscan); } -- 2.34.1