web-dev-qa-db-ja.com

テーブルを切り捨てた後、シーケンスがリセットされない

テーブルを切り捨てた後、SELECT lastval()を使用して間違ったシリアルIDを取得します。

テーブルを切り捨てると、SELECT lastval()が使用され、間違ったIDが取得されました/

29
user1369887

試す

TRUNCATE TABLE table_name 
RESTART IDENTITY;

そうなる

切り捨てられたテーブルの列が所有するシーケンスを自動的に再起動します。

詳細はこちら: [〜#〜] truncate [〜#〜]

64

以下は、シーケンスをリセットする標準的な方法です。

truncate table table_name restart identity;

しかし、いくつかのバージョンとプラットフォームでは、それは構文エラーです、

その場合、リセットシーケンスなしで切り捨て、別のsqlでシーケンスを変更できます。これを試してください。

truncate table table_name;
alter sequence seq_name start 1;
19
Eric Wang

次をチェック

ALTER SEQUENCE sequence_name RESTART WITH 1;
3
Daniel Gastón

シーケンスをリセットしたい場合:

setval('sequence_name', 0)

既存のシーケンス名を一覧表示するには、psqlプロンプトで\dsを発行します。

2
Clodoaldo Neto

シーケンスをリセットして番号1から開始する最良の方法は、シーケンスを正常にトランケートした後で次を実行することです。

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1

したがって、たとえば、usersテーブルの場合は次のようになります。

ALTER SEQUENCE users_id_seq RESTART WITH 1
2
jahmed31