Sekvence bude inkrementována při každém pokusu o vložení bez ohledu na její úspěch. Jednoduchá update
(jako ve vašem příkladu) jej nezvýší, ale insert on conflict update
bude od insert
je vyzkoušeno před update
.
Jedním z řešení je změnit id
na bigint
. Dalším je nepoužívat sekvenci a spravovat ji sami. A další je provést ruční 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)
To předpokládá title
je jedinečný.