Ich möchte das Auto-Inkrement-Feld einer Tabelle auf einen bestimmten Wert erzwingen. 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 bei postgres :(
Ich habe einen Tisch product
mit Id
und name
Feld
Antworten:
Wenn Sie die Tabelle
product
mit einerid
Spalte erstellt haben, wird die Sequenz nicht einfach aufgerufenproduct
, sondernproduct_id_seq
(dh${table}_${column}_seq
).Dies ist der
ALTER SEQUENCE
Befehl, den Sie benötigen:Sie können die Sequenzen in Ihrer Datenbank mit dem
\ds
Befehl in psql anzeigen. Wenn Sie\d product
sich die Standardeinschränkung für Ihre Spalte ansehen, gibt dernextval(...)
Aufruf auch den Sequenznamen an.quelle
ALTER SEQUENCE yourTableName_yourColumnName_seq RESTART WITH #
: "seq" ist der Literaltext, und Sie geben eine Zahl für # ein. Vernachlässigen Sie nicht die Unterstriche. :-)ALTER SEQUENCE my_schema.product_id_seq RESTART WITH 1453
1453
, sollten Sie dies tunRESTART WITH 1454
.Hier ist der Befehl, nach dem Sie suchen, vorausgesetzt, Ihre Sequenz für die Produkttabelle lautet product_id_seq:
quelle
Der folgende Befehl erledigt dies automatisch für Sie: Dadurch werden auch alle Daten in der Tabelle gelöscht. Also sei vorsichtig.
quelle
TABLE
Schlüsselwort ist redundant.TRUNCATE someTable RESTART IDENTITY;
reicht.TRUNCATE someTable RESTART IDENTITY CASCADE;
?So stellen Sie den Sequenzzähler ein:
Wenn Sie den Sequenznamen nicht kennen, verwenden Sie die
pg_get_serial_sequence
Funktion:Die Parameter sind der Tabellenname und der Spaltenname.
Oder geben Sie einfach
\d product
an derpsql
Eingabeaufforderung ein:quelle
Aus Gründen der Benutzerfreundlichkeit aus dem Kommentar konvertiert
Aus dieser Meldung geht nicht hervor, wie die richtige Syntax lautet. Es ist:
quelle
- Ändern Sie den Startwert der Sequenz
Gleich aber dynamisch:
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
quelle
brew services restart postgresql
Wenn Sie das automatische Inkrementieren über die GUI zurücksetzen möchten, führen Sie die folgenden Schritte aus.
quelle
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:
quelle
sequence
oder Sie die Tabelle NICHT abschneiden können. Ich denke, es ist die beste AntwortUm das automatische Inkrement zurückzusetzen, müssen Sie Ihren Sequenznamen mithilfe der folgenden Abfrage ermitteln.
Syntax:
Beispiel:
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:
Beispiel:
quelle
Um die Sequenz-ID zu erhalten, verwenden Sie
Dadurch erhalten Sie eine Sequenz-ID als tableName_ColumnName_seq
Um die letzte Startnummer zu erhalten, verwenden Sie
oder wenn Sie wissen, dass die Sequenz-ID bereits direkt verwendet wird.
Es gibt Ihnen die letzte Startnummer
Verwenden Sie zum Zurücksetzen der Startnummer
quelle
Verwenden Sie diese Abfrage, um zu überprüfen, was der Sequenzschlüssel mit Schema und Tabelle ist.
Verwenden Sie diese Abfrage, um den Inkrementwert nacheinander zu erhöhen.
Beim Einfügen in die Tabelle wird der nächste inkrementierte Wert als Schlüssel (111) verwendet.
Verwenden Sie diese Abfrage, um einen bestimmten Wert als inkrementierten Wert festzulegen
Beim Einfügen in die Tabelle wird der nächste inkrementierte Wert als Schlüssel verwendet (121).
quelle
Beachten Sie, dass der Tabellenname mit '_' im Sequenznamen entfernt wird.
Beispiel: Tabellenname: user_tokens Spalte: id Sequenzname: usertokens_id_seq
quelle