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

Reply via email to