En sekvens vil blive forøget, hver gang en indsættelse forsøges, uanset om den lykkes. En simpel update
(som i dit eksempel) vil ikke øge den, men en insert on conflict update
vil siden insert
er prøvet før update
.
En løsning er at ændre id
til bigint
. En anden er ikke at bruge en sekvens og styre den selv. Og en anden er at lave en manuel 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)
Dette forudsætter title
er unik.