Urutan akan bertambah setiap kali penyisipan dicoba terlepas dari keberhasilannya. update
sederhana (seperti dalam contoh Anda) tidak akan menambahnya tetapi insert on conflict update
akan sejak insert
dicoba sebelum update
.
Salah satu solusinya adalah mengubah id
ke bigint
. Lain adalah tidak menggunakan urutan dan mengelolanya sendiri. Dan yang lainnya adalah melakukan penyisipan manual:
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)
Ini mengandaikan title
unik.