PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Django-Objekterstellung und Postgres-Sequenzen

alles funktioniert gut. djangos create() hat nichts direkt mit der Inzementierung von Sequenzen zu tun. kurz:

  • postgresql auto incrementing('serial' type) ist nur eine Abkürzung von'create sequence + create integerfield with sequence value as default'
  • Djangos Autofield-Primärschlüssel (integer, falls nicht anders von Ihnen angegeben) erstellt nur ein serielles Feld
  • Wenn Sie die ID manuell angeben, fügt postgres den Wert in die Datenbank ein. Wenn Sie einen Wert angeben, wird der 'Standard'-Parameter weggelassen, was ein korrektes Verhalten ist.

Wenn Sie also möchten, dass Ihre Einfügungen die Sequenz auf eine Weise Ihrer Wahl erhöhen, müssen Sie den Sequenzwert manuell ändern, indem Sie SELECT setval('sequence_name', int_value) verwenden; Andernfalls lassen Sie es null und es wird automatisch erhöht - wählen Sie den aktuellen Wert und erhöhen Sie ihn um +1 (falls nicht anders in der Sequenzdefinition angegeben).

Eine andere Idee ist, dass Sie das Objekt erstellen und dann die ID aktualisieren (natürlich kann sie nicht bereits verwendet werden) und am Ende den Sequenzwert auf die maximale ID setzen.