Sekwencja będzie inkrementowana za każdym razem, gdy zostanie podjęta próba wstawienia, niezależnie od powodzenia. Prosta update
(jak w twoim przykładzie) nie zwiększy go, ale insert on conflict update
będzie od insert
jest próbowany przed update
.
Jednym z rozwiązań jest zmiana id
do bigint
. Innym nie jest używanie sekwencji i samodzielne zarządzanie nią. A innym jest ręczne wykonanie 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)
Zakładamy, że title
jest wyjątkowy.