Alexander Korotkov <[email protected]> 于2025年12月20日周六 19:08写道:
> Hi Tender, > > On Sat, Dec 20, 2025 at 5:18 AM Tender Wang <[email protected]> wrote: > > I found this feature merged; thanks for this work. > > I tested it and found that one place in the error errcode may need to be > changed. > > In checkPartition(): > > ... > > if (get_partition_parent(partRelOid, false) != RelationGetRelid(rel)) > > ereport(ERROR, > > errcode(ERRCODE_UNDEFINED_TABLE), > > errmsg("relation \"%s\" is not a partition of relation \"%s\"", > > ... > > > > ERRCODE_UNDEFINED_TABLE usually means "table does not exist." > > When entering here, the table should exist, otherwise table_open() > already reports an error. > > I found another two errcode in checkPartition() use > ERRCODE_WRONG_OBJECT_TYPE, > > In the attached patch, I replace ERRCODE_UNDEFINED_TABLE with > ERRCODE_WRONG_OBJECT_TYPE. > > I agree with you that ERRCODE_UNDEFINED_TABLE is certainly wrong error > code because the table actually exists. ERRCODE_WRONG_OBJECT_TYPE is > better. For example, we throw it when trying to attach a partition to > non-partitioned table. So, the parent table type is wrong. However, > are objects in the situation under consideration really have wrong > type? The problem is that one table is not partition of another. > However, it's possibly that they could be attached without changing of > their types. So, I think about > ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE. What do you think? > It's ok for me. Please check the v2 patch. -- Thanks, Tender Wang
From 492c595cf481c67eb2b4823ae3e389d0a6fb7f83 Mon Sep 17 00:00:00 2001 From: Tender Wang <[email protected]> Date: Sat, 20 Dec 2025 10:56:36 +0800 Subject: [PATCH v2] Adjust errcode in checkPartition(). Replace ERRCODE_UNDEFINED_TABLE with ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE. --- src/backend/parser/parse_utilcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 2b7b084f216..de8c0a5560b 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -3544,7 +3544,7 @@ checkPartition(Relation rel, Oid partRelOid, bool isMerge) if (get_partition_parent(partRelOid, false) != RelationGetRelid(rel)) ereport(ERROR, - errcode(ERRCODE_UNDEFINED_TABLE), + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("relation \"%s\" is not a partition of relation \"%s\"", RelationGetRelationName(partRel), RelationGetRelationName(rel)), isMerge -- 2.34.1
