PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O incremento automático do PostgreSQL aumenta a cada atualização


Uma sequência será incrementada sempre que uma inserção for tentada, independentemente de seu sucesso. Uma simples update (como no seu exemplo) não irá incrementá-lo, mas um insert on conflict update vai desde o insert é tentado antes da update .

Uma solução é alterar o id para bigint . Outra é não usar uma sequência e gerenciá-la você mesmo. E outra é fazer um upsert 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)

Isso supõe title é único.