426 Stimmen

Zurücksetzen des automatischen Zählers in Postgres

Ich möchte das Auto-Inkrement-Feld einer Tabelle auf einen bestimmten Wert zwingen, habe ich mit diesem versucht:

ALTER TABLE product AUTO_INCREMENT = 1453

UND

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

Ich bin neu bei Postgres :(

Ich habe eine Tabelle product con Id y name Feld

564voto

araqnid Punkte 116680

Wenn Sie die Tabelle product mit einer id Spalte, dann wird die Sequenz nicht einfach als product sondern vielmehr product_id_seq (d.h., ${table}_${column}_seq ).

Dies ist die ALTER SEQUENCE Befehl, den Sie benötigen:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

Sie können die Sequenzen in Ihrer Datenbank mit der Funktion \ds Befehl in psql. Wenn Sie \d product und sehen Sie sich die Standardbeschränkung für Ihre Spalte an, die nextval(...) Aufruf wird auch der Name der Sequenz angegeben.

197voto

Loolooii Punkte 7961

Der folgende Befehl erledigt dies automatisch für Sie: Dabei werden auch alle Daten in der Tabelle gelöscht. Seien Sie also vorsichtig.

TRUNCATE TABLE someTable RESTART IDENTITY;

168voto

matt snider Punkte 3913

Hier ist der Befehl, nach dem Sie suchen, vorausgesetzt, Ihre Sequenz für die Produkttabelle lautet product_id_seq:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

70voto

Clodoaldo Neto Punkte 107690

So setzen Sie den Sequenzzähler:

setval('product_id_seq', 1453);

Wenn Sie den Sequenznamen nicht kennen, verwenden Sie die pg_get_serial_sequence Funktion:

select pg_get_serial_sequence('product', 'id');
 pg_get_serial_sequence 
------------------------
 public.product_id_seq

Die Parameter sind der Tabellenname und der Spaltenname.

Oder geben Sie einfach eine \d product am psql sofort:

=> \d product
                         Table "public.product"
 Column |  Type   |                      Modifiers                       
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('product_id_seq'::regclass)
 name   | text    |

59voto

befabry Punkte 496
-- Change the starting value of the sequence

ALTER SEQUENCE project_id_seq RESTART 3000;

Dasselbe, aber dynamisch:

SELECT SETVAL('project_id_seq', (SELECT MAX(id) + 1 FROM project));

Ich stimme zu, dass die Verwendung eines SELECT ist beunruhigend, aber es funktioniert.

Quelle: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X