テーブルを切り捨てた後、SELECT lastval()を使用して間違ったシリアルIDを取得します。
テーブルを切り捨てると、SELECT lastval()が使用され、間違ったIDが取得されました/
試す
TRUNCATE TABLE table_name
RESTART IDENTITY;
そうなる
切り捨てられたテーブルの列が所有するシーケンスを自動的に再起動します。
詳細はこちら: [〜#〜] truncate [〜#〜]
以下は、シーケンスをリセットする標準的な方法です。
truncate table table_name restart identity;
しかし、いくつかのバージョンとプラットフォームでは、それは構文エラーです、
その場合、リセットシーケンスなしで切り捨て、別のsqlでシーケンスを変更できます。これを試してください。
truncate table table_name;
alter sequence seq_name start 1;
次をチェック
ALTER SEQUENCE sequence_name RESTART WITH 1;
シーケンスをリセットしたい場合:
setval('sequence_name', 0)
既存のシーケンス名を一覧表示するには、psqlプロンプトで\ds
を発行します。
シーケンスをリセットして番号1から開始する最良の方法は、シーケンスを正常にトランケートした後で次を実行することです。
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
したがって、たとえば、usersテーブルの場合は次のようになります。
ALTER SEQUENCE users_id_seq RESTART WITH 1