sql >> Databáze >  >> RDS >> PostgreSQL

Auto-inkrement PostgreSQL se zvyšuje při každé aktualizaci

Sekvence bude inkrementována při každém pokusu o vložení bez ohledu na její úspěch. Jednoduchá update (jako ve vašem příkladu) jej nezvýší, ale insert on conflict update bude od insert je vyzkoušeno před update .

Jedním z řešení je změnit id na bigint . Dalším je nepoužívat sekvenci a spravovat ji sami. A další je provést ruční 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)

To předpokládá title je jedinečný.



  1. změnit auto_increment ve stejné tabulce pomocí poddotazu mysql

  2. problém s cizím klíčem a indexem

  3. Pamatujte na to při formátování datového typu TIME v SQL Server (T-SQL)

  4. Test výkonu MS SQL Server na Linuxu vs Windows, abyste zjistili rozdíl