シーケンスは、その成功に関係なく、挿入が試行されるたびにインクリメントされます。簡単なupdate
(あなたの例のように)それをインクリメントしませんが、insert on conflict update
insert
以降、 update
の前に試行されます 。
1つの解決策は、id
を変更することです bigint
へ 。もう1つは、シーケンスを使用せず、自分で管理することです。もう1つは、手動でアップサートを行うことです。
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)
これは、title
を想定しています ユニークです。