sql >> Databasteknik >  >> RDS >> PostgreSQL

Django-objektskapande och Postgres-sekvenser

allt fungerar bra. django's create() har inget att göra med sekvensincementering direkt. kortfattat:

  • postgresql auto incrementing('seriell' typ) är bara en genväg till 'skapa sekvens + skapa heltalsfält med sekvensvärde som standard'
  • djangos primärnyckel för autofält (idinteger om det inte anges på annat sätt av dig) skapar bara ett seriellt fält
  • när du anger id manuellt, infogar postgres värdet i databasen. när du anger ett värde utelämnas parametern 'default', vilket är ett korrekt beteende.

så om du vill att dina inlägg ska öka sekvensen på ett sätt som du väljer, måste du manuellt ändra sekvensvärdet med SELECT setval('sekvensnamn', int_värde); i annat fall lämna den null och den ökar automatiskt - välj den aktuella värdet och öka den +1 (om det inte anges annorlunda i sekvensdefinitionen).

en annan idé är att du skapar objektet och sedan uppdaterar id:t (det kan givetvis inte redan användas) och i slutändan ställer du in sekvensvärdet till max id.



  1. Hur man skickar variabel i mysql_query

  2. Ta bort SCHEMABINDING från en användardefinierad funktion i SQL Server

  3. SQL-kommaseparerad rad med Group By-sats

  4. optimera mysql count-fråga