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

Creazione di oggetti Django e sequenze Postgres

tutto funziona bene. create() di django non ha nulla a che fare direttamente con l'incementazione della sequenza. brevemente:

  • l'incremento automatico di postgresql (tipo 'serial') è solo una scorciatoia di 'crea sequenza + crea campo intero con valore sequenza come predefinito'
  • La chiave primaria autofield di django (idinteger se non specificato diversamente da te) crea semplicemente un campo seriale
  • quando specifichi manualmente l'id, postgres inserisce il valore nel database. quando specifichi un valore, omette il parametro 'default', che è un comportamento corretto.

quindi, se vuoi che i tuoi inserti incrementino la sequenza in un modo a tua scelta, devi cambiare manualmente il valore della sequenza usando SELECT setval('sequence_name', int_value); altrimenti lascialo nullo e aumenterà automaticamente - seleziona il valore corrente e incrementalo +1 (se non specificato diversamente nella definizione della sequenza).

un'altra idea è creare l'oggetto e quindi aggiornare l'id (ovviamente non può essere già utilizzato) e alla fine impostare il valore della sequenza sul max id.