Re: Adding a stored generated column without long-lived locks

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>, Álvaro Herrera <alvherre(at)kurilemu(dot)de>
Cc: Alberto Piai <alberto(dot)piai(at)gmail(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Adding a stored generated column without long-lived locks
Date: 2026-09-23 10:26:28
Message-ID: d57d7a0b7e2fe1c148996e41559647adde4c2034.camel@cybertec.at
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, 2026-09-23 at 12:07 +0200, Matthias van de Meent wrote:
> On Tue, 22 Sept 2026 at 17:17, Álvaro Herrera <alvherre(at)kurilemu(dot)de> wrote:
> > On 2026-Sep-21, Alberto Piai wrote:
> >
> > > Repro:
> > >
> > > create table tgen.t_repro_1 (a numeric, b numeric);
> > > insert into tgen.t_repro_1 values ('1.0', '1.00'), ('1.0', '1.0');
> > > create unique index on tgen.t_repro_1 ((b::text));
> > > alter table tgen.t_repro_1
> > > add constraint chk_gen check (b is not distinct from a);
> > >
> > > alter table tgen.t_repro_1
> > > alter b add generated using constraint chk_gen stored;
> > >
> > > update tgen.t_repro_1 set a = a;
> > > ERROR: duplicate key value violates unique constraint "t_repro_1_b_idx"
> > > DETAIL: Key ((b::text))=(1.0) already exists.
> >
> > Does this _matter_?
>
> Yes, this does matter.

I tend to agree.

Rather than just documenting this problem, I'd say that your idea with
the equalimage() support function has appeal. We can simply reject the
operation if the function returns FALSE.

Yours,
Laurenz Albe

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message shveta malik 2026-09-23 10:37:02 Re: Persist slot invalidations before publishing them
Previous Message Etsuro Fujita 2026-09-23 10:23:49 Re: [PG19][PATCH] Make postgres_fdw statistics import atomic