PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Auto-inkrementacja PostgreSQL wzrasta przy każdej aktualizacji

Sekwencja będzie inkrementowana za każdym razem, gdy zostanie podjęta próba wstawienia, niezależnie od powodzenia. Prosta update (jak w twoim przykładzie) nie zwiększy go, ale insert on conflict update będzie od insert jest próbowany przed update .

Jednym z rozwiązań jest zmiana id do bigint . Innym nie jest używanie sekwencji i samodzielne zarządzanie nią. A innym jest ręczne wykonanie 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)

Zakładamy, że title jest wyjątkowy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę stwierdzić, czy Autovacuum PostgreSQL działa w systemie UNIX?

  2. Heroku Postgres:To połączenie zostało zamknięte

  3. Wstawianie wielu rekordów z pg-promise

  4. Tworzenie zrzutu bazy danych dla określonych tabel i wpisów Postgres

  5. Jak mogę wysłać żądanie http z funkcji lub wyzwalacza postgresql?