sql >> Database teknologi >  >> RDS >> PostgreSQL

Django-objektskabelse og Postgres-sekvenser

alt fungerer fint. django's create() har intet at gøre med sekvensincementering direkte. kort:

  • postgresql auto incrementing('seriel' type) er blot en genvej til 'opret sekvens + opret heltalfelt med sekvensværdi som standard'
  • djangos primære autofeltnøgle (idinteger, hvis det ikke er angivet andet af dig) opretter bare et serielt felt
  • når du angiver id'et manuelt, indsætter postgres værdien i databasen. når du angiver en værdi, udelader den parameteren 'default', hvilket er en korrekt adfærd.

så hvis du ønsker, at dine inserts skal øge sekvensen på en måde efter eget valg, skal du manuelt ændre sekvensværdien ved at bruge SELECT setval('sequence_name', int_value); ellers lad den være null, og den vil stige automatisk - vælg den aktuelle værdi og øg den +1 (hvis det ikke er angivet anderledes i sekvensdefinitionen).

en anden idé er, at du opretter objektet og derefter opdaterer id'et (selvfølgelig kan det ikke allerede bruges) og til sidst indstiller sekvensværdien til max id.



  1. SQL Server-forespørgsels-xml-attribut for en elementværdi

  2. Brug af Hibernate-forespørgsel:kolon bliver behandlet som parameter / escapende kolon

  3. Find alle forældre i mysql-tabel med enkelt forespørgsel (Rekursiv forespørgsel)

  4. Sådan opretter du VARRAY'er som PL/SQL-blokmedlem i Oracle-databasen