PostgreSQLでPOST処理をした際、「duplicate key value violates unique constraint ~~」エラーの表示
Laravelで作成したアプリケーションでフォームからsubmit(POST処理)を行ったところ、
duplicate key value violates unique constraint ~~
とエラー画面が表示された。
原因
tableのレコード数とシーケンス番号がづれていたため、
エラーが発生していた。
解決方法
PostgreSQLにログイン
# 1. tableのレコード数の確認
$ SELECT MAX(id) FROM table_name;
max
-----
15
(1 row)
# 2. シーケンス番号の確認
$ SELECT nextval('table_name_id_seq');
nextval
---------
11
(1 row)
# 3. シーケンス番号をレコード数に合わせる
$ SELECT setval('table_name_id_seq', (SELECT MAX(id) FROM table_name));
setval
--------
15
(1 row)
なぜシーケンス番号がずれたのか
sqlから INSERT文 を実行した際、下記コードの様なsqlを実行していた。
INSERT INTO table_name (id, hoge, fuga) VALUES
(1, 'HOGE1', 'FUGA1'),
(2, 'HOGE2', 'FUGA2'),
(3, 'HOGE3', 'FUGA3');
INSERT文 を一行で実行していたため、シーケンス番号として1番しか採番されなかった。