wake-up-neo.com

Setzt den automatischen Inkrementzähler in Postgres zurück

Ich möchte das Auto-Inkrement-Feld einer Tabelle auf einen bestimmten Wert zwingen. Ich habe Folgendes 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 in Postgres :(

Ich habe eine Tabelle product mit Id und name Feld

186
Rad

Wenn Sie die Tabelle product mit einer id -Spalte erstellt haben, heißt die Sequenz nicht einfach product, sondern product_id_seq (D. H. ${table}_${column}_seq).

Dies ist der Befehl ALTER SEQUENCE, Den Sie benötigen:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

Sie können die Sequenzen in Ihrer Datenbank mit dem Befehl \ds In psql anzeigen. Wenn Sie \d product Ausführen und sich die Standardeinschränkung für Ihre Spalte ansehen, gibt der Aufruf nextval(...) auch den Sequenznamen an.

238
araqnid

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

ALTER SEQUENCE product_id_seq NEUSTART MIT 1453;

140
matt snider

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

TRUNCATE TABLE someTable RESTART IDENTITY;
111
Loolooii

So stellen Sie den Sequenzzähler ein:

setval('product_id_seq', 1453);

Wenn Sie den Sequenznamen nicht kennen, verwenden Sie das 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 ein \d product an der psql Eingabeaufforderung:

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

Aus Gründen der Benutzerfreundlichkeit vom Kommentar konvertiert

Aus dieser Meldung geht nicht hervor, wie die korrekte Syntax lautet. Es ist:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;
12
Anwar

wenn Sie Zurücksetzen Auto Increment von der GUI aus durchführen möchten, gehen Sie folgendermaßen vor.

  1. Gehen Sie zu Ihrer Datenbank
  2. Klicken Sie auf Öffentlich
  3. auf der tabellenseite sehen sie TABS wie 'tables', 'views', 'sequence' so.
  4. Klicken Sie auf Sequenzen
  5. wenn Sie auf "Sequenzen" klicken, werden alle Sequenzen aufgelistet. Klicken Sie auf eine der gewünschten Sequenzen. Zurücksetzen
  6. Danach sehen Sie Multiple-Choice-Optionen wie 'Ändern', 'Wert setzen', 'Neustart', 'Zurücksetzen' usw.
  7. klicken Sie dann auf Zurücksetzen und fügen Sie eine neue Zeile hinzu.
3
Chaudhary

- Ändern Sie den Startwert der Sequenz

ALTER SEQUENCE project_id_seq RESTART 3000;

Gleich, aber dynamisch:

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

Ich bin damit einverstanden, dass die Verwendung eines SELECT störend ist, aber es funktioniert.

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

3
Wiwwil

Wenn Sie eine Tabelle mit einer IDENTITY-Spalte haben, für die Sie den nächsten Wert zurücksetzen möchten, können Sie den folgenden Befehl verwenden:

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;
2
BrianB

Um das automatische Inkrement zurückzusetzen, müssen Sie Ihren Sequenznamen mithilfe der folgenden Abfrage ermitteln.

Syntax:

SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);

Beispiel:

SELECT pg_get_serial_sequence('demo', 'autoid');

Die Abfrage gibt den Sequenznamen von autoid als "Demo_autoid_seq" zurück. Verwenden Sie dann die folgende Abfrage, um das Autoid zurückzusetzen

Syntax:

ALTER SEQUENCE sequenceName RESTART WITH value;

Beispiel:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;
2
vinoth shankar

Verwenden Sie, um die Sequenz-ID abzurufen

SELECT pg_get_serial_sequence('tableName', 'ColumnName');

Dadurch erhalten Sie die Sequenz-ID tableName_ColumnName_seq

Verwenden Sie, um die letzte Startnummer abzurufen

select currval(pg_get_serial_sequence('tableName', 'ColumnName'));

oder wenn Sie wissen, Sequenz-ID bereits direkt verwenden.

select currval(tableName_ColumnName_seq);

Es gibt Ihnen die letzte Startnummer

Verwenden Sie, um die Startnummer zurückzusetzen

ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45
1
Raja A