sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik een primaire sleutelreeks in Django veilig doorsturen?

Aangezien ik nog geen "geautomatiseerde" manier heb gevonden om dit te doen, denk ik aan de volgende oplossing - het zou haalbaar zijn voor mijn specifieke situatie:

  1. Stel de volgorde in met een MAXVALUE 49999 GEEN CYCLUS
  2. Als 49999 is bereikt, zal de volgende save() een postgres-fout opleveren
  3. Vang die uitzondering op en verhoog opnieuw als een formulierfout "je hebt geen nummers meer, reset naar het volgende blok en probeer het opnieuw"
  4. Geef een weergave waar de gebruiker het volgende blok kan activeren, d.w.z. voer "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999" uit

Ik vind het ongemakkelijk om automatisch opnieuw op te starten bij het opvangen van de uitzondering:

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

omdat ik vrees dat twee gelijktijdige save()'s die geen id's meer hebben, zullen leiden tot twee afzonderlijke herstarts en een daaropvolgende schending van de unieke beperking. (in principe hetzelfde concept als het oorspronkelijke probleem)



  1. postgres detecteert herhalende patronen van nullen

  2. ORA-00907:rechter haakje ontbreekt

  3. Tabel gewaardeerde functies in ORACLE 11g? (geparametriseerde weergaven)

  4. Failover en failback op Amazon RDS