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

Warum wird das Postgres-Sequenzelement hochgefahren, selbst wenn die Objekterstellung fehlschlägt?

Ja, das ist das erwartete Verhalten. Siehe Dokumentation :

Beachten Sie, dass nextval wird normalerweise als Standardwert für eine Autoincrement/Serial-Spalte gesetzt.

Versuchen Sie sich auch vorzustellen, wie schwer und ineffizient es wäre, wenn nextval waren zurückzusetzen. Im Wesentlichen müssten Sie jeden Client auf nextval sperren bis die gesamte Transaktion (diejenige, die die Sperre erworben hat) verarbeitet ist. Vergessen Sie in diesem Fall gleichzeitige Einfügungen.

Wie was? Das Problem in Ihrem Fall war, dass jemand manuell einen Wert für eine Autoincrement-Spalte angegeben hat. Sie sollten das niemals tun, es sei denn, Sie sind ein Samurai. :)