Hello Alexander, Thanks for testing.
On 2023-Aug-31, Alexander Lakhin wrote: > 25.08.2023 14:38, Alvaro Herrera wrote: > > I have now pushed this again. Hopefully it'll stick this time. > > I've found that after that commit the following query: > CREATE TABLE t(a int PRIMARY KEY) PARTITION BY RANGE (a); > CREATE TABLE tp1(a int); > ALTER TABLE t ATTACH PARTITION tp1 FOR VALUES FROM (0) to (1); > > triggers a server crash: Hmm, that's some weird code I left there all right. Can you please try this patch? (Not final; I'll review it more completely later, particularly to add this test case.) -- Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/ <Schwern> It does it in a really, really complicated way <crab> why does it need to be complicated? <Schwern> Because it's MakeMaker.
>From ab241913dec84265ca64d3cb76d1509bb7ce1808 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Thu, 31 Aug 2023 12:24:18 +0200 Subject: [PATCH] Fix not-null constraint test Per report from Alexander Lakhin --- src/backend/commands/tablecmds.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index d097da3c78..5941d0a4be 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -15750,7 +15750,8 @@ MergeAttributesIntoExisting(Relation child_rel, Relation parent_rel) contup = findNotNullConstraintAttnum(RelationGetRelid(parent_rel), attribute->attnum); - if (!((Form_pg_constraint) GETSTRUCT(contup))->connoinherit) + + if (!HeapTupleIsValid(contup)) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("column \"%s\" in child table must be marked NOT NULL", @@ -15975,10 +15976,20 @@ MergeConstraintsIntoExisting(Relation child_rel, Relation parent_rel) systable_endscan(child_scan); if (!found) + { + if (parent_con->contype == CONSTRAINT_NOTNULL) + ereport(ERROR, + errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("column \"%s\" in child table must be marked NOT NULL", + get_attname(parent_relid, + extractNotNullColumn(parent_tuple), + false))); + ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("child table is missing constraint \"%s\"", NameStr(parent_con->conname)))); + } } systable_endscan(parent_scan); -- 2.39.2