Re: [PATCH] Fix duplicate errmsg in ALTER TABLE SPLIT PARTITION
John Naylor <johncnaylorls@gmail.com>
From: John Naylor <johncnaylorls@gmail.com>
To: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Cc: jian he <jian.universality@gmail.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>,
Daniel Gustafsson <daniel@yesql.se>
Date: 2026-05-05T07:15:37Z
Lists: pgsql-hackers
On Wed, Apr 29, 2026 at 5:03 PM Ayush Tiwari
<ayushtiwari.slg01@gmail.com> wrote:
> - For SPLIT, switch the adjacency error to
> errmsg("cannot split partition \"%s\"",
> get_rel_name(splitPartOid)),
> so it names the old partition, matching the merge wording style.
> To make splitPartOid available there, I added an Oid splitPartOid
> parameter to check_two_partitions_bounds_range() and pass
> InvalidOid from the merge call site (where is_merge is true so
> the parameter is unused).
If we have splitPartOid, then the boolean is_merge is redundant and
can be removed, right? To keep the intent clear we can add a local
variable
bool is_merge = (splitPartOid == NULL ? true : false);
Other than that, both patches LGTM.
Observation:
- errmsg("can not split non-DEFAULT partition \"%s\"",
+ errmsg("cannot split non-DEFAULT partition \"%s\"",
get_rel_name(splitPartOid)),
- errmsg("new partition cannot be DEFAULT because...
+ errdetail("New partition cannot be DEFAULT because...
-ERROR: new partition cannot be DEFAULT because DEFAULT partition
"sales_others" already exists
+ERROR: cannot split non-DEFAULT partition "sales_all"
LINE 5: PARTITION sales_others2 DEFAULT);
^
+DETAIL: New partition cannot be DEFAULT because DEFAULT partition
"sales_others" already exists.
If there are two errmsg's back-to-back, only the second one displays.
Maybe some automated tooling can detect cases like this going forward?
--
John Naylor
Amazon Web Services