PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Die automatische Inkrementierung von PostgreSQL erhöht sich bei jedem Update

Eine Sequenz wird inkrementiert, wann immer eine Einfügung versucht wird, unabhängig von ihrem Erfolg. Ein einfaches update (wie in Ihrem Beispiel) wird es nicht inkrementieren, sondern ein insert on conflict update wird seit dem insert wird vor dem update versucht .

Eine Lösung besteht darin, die id zu ändern zu bigint . Eine andere besteht darin, keine Sequenz zu verwenden und sie selbst zu verwalten. Und eine andere ist ein manuelles 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)

Dies setzt title voraus ist einzigartig.