En sekvens kommer att ökas varje gång en infogning görs oavsett om den lyckades. En enkel update
(som i ditt exempel) kommer inte att öka den utan en insert on conflict update
kommer sedan insert
provas före update
.
En lösning är att ändra id
till bigint
. En annan är att inte använda en sekvens och hantera den själv. Och en annan är att göra en manuell upsert:
with s as (
select id
from notifications
where title = 'something'
), i as (
insert into notifications (title, description)
select 'something', 'whatever'
where not exists (select 1 from s)
)
update notifications
set title = 'something else'
where id = (select id from s)
Detta förutsätter title
är unik.