En sekvens kommer att ökas varje gång en infogning görs oavsett om den lyckades. En enkel update (som i ditt exempel) kommer inte att öka den utan en insert on conflict update kommer sedan insert provas före update .
En lösning är att ändra id till bigint . En annan är att inte använda en sekvens och hantera den själv. Och en annan är att göra en manuell 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)
Detta förutsätter title är unik.