it-swarm.com.de

Setzen Sie den PostgreSQL-Primärschlüssel auf 1 zurück

Gibt es eine Möglichkeit, den Primärschlüssel einer PostgreSQL-Tabelle zurückzusetzen, um bei einer bestückten Tabelle erneut bei 1 zu beginnen?

Im Moment werden Zahlen ab 1000000 generiert. Ich möchte, dass alles zurückgesetzt wird und mit 1 beginnt, wobei alle vorhandenen Daten erhalten bleiben.

53
David

Primärschlüssel, die automatisch inkrementiert werden (d. H. Spalten mit dem Datentyp serial primary key), sind einer Folge zugeordnet. Sie können den nächsten Wert für eine beliebige Sequenz mit der Funktion setval(<seqname>, <next_value>) einstellen. Beachten Sie, dass Sie zur eigentlichen Ausführung der Funktion SELECT wie folgt verwenden müssen: SELECT setval(<seqname>, <next_value>)

Die Namen der automatisch erstellten Sequenzen bei Verwendung der Seriennummer sind <table>_<column>_seq

27
Vinko Vrsalovic

Um eine Sequenz zurückzusetzen und mit Nummer 1 zu beginnen, führen Sie die folgenden Schritte aus:

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1

Zum Beispiel für die users-Tabelle wäre dies:

ALTER SEQUENCE users_id_seq RESTART WITH 1
129

@bluish das Einfügen eines neuen Datensatzes mit einem automatisch inkrementierten Primärschlüssel ist genauso wie das Verwenden einer Sequenz explizit folgendermaßen:

INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)

Wenn Sie möchten, dass die erste ID 1 ist, müssen Sie Ihre Sequenz auf 0 setzen. Da sie jedoch außerhalb der zulässigen Grenzen liegt, müssen Sie die ALTER SEQUECE-Anweisung .. verwenden. Wenn Sie also ein serielles Feld namens number haben in Ihrem Tischmenü zum Beispiel:

ALTER SEQUENCE menu_number_seq RESTART

wird den Job perfekt machen.

0