sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL auto-inkrement ökar vid varje uppdatering

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.



  1. Ansluta till Oracle Database via Excel

  2. PostgreSQL-motsvarighet för SQL Server GROUP BY WITH ROLLUP

  3. Hur skyddar sprintf() mot SQL-injektion?

  4. Ska jag designa en tabell med en primärnyckel av varchar eller int?