Eine Sequenz wird inkrementiert, wann immer eine Einfügung versucht wird, unabhängig von ihrem Erfolg. Ein einfaches update
(wie in Ihrem Beispiel) wird es nicht inkrementieren, sondern ein insert on conflict update
wird seit dem insert
wird vor dem update
versucht .
Eine Lösung besteht darin, die id
zu ändern zu bigint
. Eine andere besteht darin, keine Sequenz zu verwenden und sie selbst zu verwalten. Und eine andere ist ein manuelles 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)
Dies setzt title
voraus ist einzigartig.