PostgreSQLでシーケンスの値を同期
PostgreSQLで、型がserial
またはbigserial
のようなシーケンスで管理される型のカラムが存在するテーブルに、シーケンス値を使用しないような方法でデータを登録した場合に、シーケンスの値がずれる場合がある。
そのような場合は以下のようにしてシーケンス値を存在する値の最大値に設定すれば良い。(ID列をシーケンス値で自動採番するようなテーブルを想定)
-- 「person_id_seq」シーケンスの値をpersonテーブルIDの最大値に更新
SELECT setval('person_id_seq', (SELECT max(id) FROM person));
テーブルが空の場合は以下のようにする。
SELECT setval('person_id_seq', coalesce((SELECT max(id) FROM person), 1), coalesce((SELECT max(id) <> null FROM person), false));