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

7voto

Vinoth Shankar Punkte 670

Um das automatische Inkrement zurückzusetzen, müssen Sie den Namen Ihrer Sequenz mit der folgenden Abfrage ermitteln.

Syntax:

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

Exemple :

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

Die Abfrage gibt den Sequenznamen von autoid als "Demo_autoid_seq" Verwenden Sie dann die folgende Abfrage, um die Auto-ID zurückzusetzen

Syntax:

ALTER SEQUENCE sequenceName RESTART WITH value;

Exemple :

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;

5voto

Raja A Punkte 69

Um die Sequenz-ID zu erhalten, verwenden Sie

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

Damit erhalten Sie die Sequester-ID als tabellenname_spaltenname_seq

Um die letzte Saatgutnummer zu erhalten, verwenden Sie

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

oder wenn Sie die Sequenz-ID bereits kennen, verwenden Sie sie direkt.

select currval(tableName_ColumnName_seq);

Sie erhalten dann die letzte Saatgutnummer

Um die Saatgutnummer zurückzusetzen, verwenden Sie

ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45

5voto

Thushara Buddhika Punkte 1286

Verwenden Sie diese Abfrage, um zu prüfen, was die Sequenz Schlüssel mit Schema und Tabelle,

SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"

Verwenden Sie diese Abfrage, um den Wert um einen Schritt zu erhöhen,

SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110

Beim Einfügen in die Tabelle wird der nächste inkrementierte Wert als Schlüssel verwendet (111).

Verwenden Sie diese Abfrage, um einen bestimmten Wert als inkrementellen Wert festzulegen

SELECT setval('"SchemaName"."SequenceKey"', 120);

Beim Einfügen in eine Tabelle wird der nächste inkrementierte Wert als Schlüssel verwendet (121).

4voto

Sufiyan Ansari Punkte 1524

Ich bin mir nicht bei allen Antworten sicher, Was ist, wenn ich keinen Sequenznamen habe? Was ist, wenn ich meine Tabelle nicht abschneiden möchte?

Die folgende Abfrage half mir, dies zu tun, ohne die vorhandenen Daten zu verändern.

ALTER TABLE <<table_name>>
    ALTER COLUMN <<primary_key_column_name>> RESTART SET START 4044;

3voto

Jeb50 Punkte 5082

Wenn die Tabelle wie folgt aussieht

bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 0)

Nach dem Einfügen einiger Datensätze im Bereich von 0-9 wird einen Konflikt für die nächste insert , um den START zurückzusetzen:

ALTER TABLE ... ALTER COLUMN ... RESTART WITH 10;

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