Gibt es eine Möglichkeit, den Primärschlüssel einer PostgreSQL-Tabelle zurückzusetzen, um in einer aufgefüllten Tabelle erneut bei 1 zu beginnen?
Im Moment werden Zahlen ab 1000000 generiert. Ich möchte, dass alles zurückgesetzt wird und auf 1 beginnt, wobei alle meine vorhandenen Daten intakt bleiben.
quelle
SELECT setval('table_id_seq', 10000)
SELECT setval('table_id_seq', 1)
, nimmt die ID beim Einfügen eines neuen Datensatzes den Wert 2 anstelle von 1 an. Die Lösung von Paweł Gościcki funktioniert. (PostgreSQL 9.3)Der beste Weg, eine Sequenz zurückzusetzen, um mit Nummer 1 zu beginnen, besteht darin, Folgendes auszuführen:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
So
users
wäre es zum Beispiel für die Tabelle:ALTER SEQUENCE users_id_seq RESTART WITH 1
quelle
WITH 1
Parameter ist redundant und kann weggelassen werdenseq
, kann durchpk
usw.) ... Aber es ist einfach durch auf psql durch\d my_table_name
. Oder überprüfen Sie per SQL,SELECT * FROM pg_indexes WHERE tablename like '%my_table_name%'
@bluish Das Einfügen eines neuen Datensatzes mithilfe eines automatisch inkrementierten Primärschlüssels entspricht der expliziten Verwendung einer Sequenz auf folgende Weise:
INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)
Wenn Sie also möchten, dass die erste ID 1 ist, müssen Sie Ihre Sequenz auf 0 setzen. Da sie jedoch außerhalb der Grenzen liegt, müssen Sie die Anweisung ALTER SEQUECE verwenden. Wenn Sie also ein Serienfeld mit dem Namen Nummer in Ihrem Tabellenmenü haben, zum Beispiel:
ALTER SEQUENCE menu_number_seq RESTART
wird den Job perfekt machen.
quelle