On Sat, Dec 20, 2025 at 5:18 AM Tender Wang <tndrwang@gmail.com> 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?