Một trình tự sẽ được tăng lên bất cứ khi nào cố gắng chèn bất kể thành công của nó. Một update
đơn giản (như trong ví dụ của bạn) sẽ không gia tăng nó mà là một insert on conflict update
sẽ kể từ khi insert
được thử trước khi cập nhật update
.
Một giải pháp là thay đổi id
thành bigint
. Cách khác là không sử dụng một trình tự và tự quản lý nó. Và một cách khác là thực hiện nâng cấp thủ công:
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)
Điều này giả sử title
là duy nhất.