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

Jak mogę bezpiecznie przekazać sekwencję klucza głównego w Django?

Ponieważ nie znalazłem jeszcze "zautomatyzowanego" sposobu na zrobienie tego, myślę o następującym obejściu - byłoby to wykonalne w mojej konkretnej sytuacji:

  1. Ustaw sekwencję za pomocą MAXVALUE 49999 BEZ CYKLU
  2. Po osiągnięciu 49999 następny save() spowoduje błąd postgresu
  3. Złap ten wyjątek i ponownie podnieś jako błąd formularza „skończyły Ci się liczby, zresetuj do następnego bloku, a następnie spróbuj ponownie”
  4. Zapewnij widok, w którym użytkownik może aktywować następny blok, tj. wykonać „ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999”

Nie podoba mi się automatyczne ponowne uruchomienie po złapaniu wyjątku:

try:
    instance.save()
except RunOutOfIdsException:
    restart_id_sequence()
    instance.save()

ponieważ obawiam się, że dwa współbieżne metody save() wyczerpią się z identyfikatorów, doprowadzą do dwóch oddzielnych ponownych uruchomień, a następnie naruszenia ograniczenia unikalności. (w zasadzie ta sama koncepcja, co oryginalny problem)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja MAX() w PostgreSQL

  2. Replikacja strumieniowa PostgreSQL — szczegółowe informacje

  3. Jak wykonać testy jednostkowe z bazą danych h2 z wykorzystaniem bpchar?

  4. Entity Framework 6 z Npgsql

  5. Średnia ruchoma na podstawie znaczników czasu w PostgreSQL