Re: Improve error message for duplicate labels in enum types

From: Jim Jones <jim(dot)jones(at)uni-muenster(dot)de>
To: Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp>, Pgsql Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Improve error message for duplicate labels in enum types
Date: 2025-08-25 08:08:23
Message-ID: e103e051-c0ee-44c0-98b6-23832f4c7b06@uni-muenster.de
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi Yugo

On 03.07.25 17:04, Yugo Nagata wrote:
> Currently, when creating an enum type, duplicate labels are caught by a unique
> index on pg_enum, resulting in a generic error message.
>
> postgres=# create type t as enum ('a','b','a');
> ERROR: duplicate key value violates unique constraint "pg_enum_typid_label_index"
> DETAIL: Key (enumtypid, enumlabel)=(16418, a) already exists.
>
> I propose adding an explicit check for duplicate labels during enum creation,
> so that a more user-friendly and descriptive error message can be produced,
> similar to what is already done in ALTER TYPE ... ADD VALUE
> or ALTER TYPE ... RENAME VALUE .. TO ....
>
> With the attached patch applied, the error message becomes:
>
> ERROR: label "a" used more than once
>

The error message for already existing enum labels starts with "enum",
e.g.  ERROR:  enum label "bar" already exists. So, perhaps this new
error message should follow the same pattern?

I also wonder if we need to add tests for it, so that we make sure the
new error is triggered prior to the generic one, e.g. in create_type.sql

-- check for duplicate enum entries
CREATE TYPE den AS ENUM ('foo','bar','foo');
CREATE TYPE en AS ENUM ('foo','bar');
ALTER TYPE en ADD VALUE 'foo';
ALTER TYPE en RENAME VALUE 'foo' TO 'bar';
DROP TYPE en;

Regards, Jim

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Shlok Kyal 2025-08-25 08:08:24 Re: Skipping schema changes in publication
Previous Message Daniel Gustafsson 2025-08-25 08:02:39 Re: Fixes a trivial bug in dumped parse/query/plan trees