PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合

PostgreSQLでレコードをINSERTしたときに、次のようなエラーが出ることがあります。

ERROR:  duplicate key value violates unique constraint "hoge_pkey"
DETAIL:  Key (id)=(10) already exists.

これは『プライマリキーが重複していてINSERTできない』というエラーです。

[参考記事] PostgreSQLで自動採番をするシーケンス(sequence)とは

PostgreSQLでは、INSERTされるプライマリキーはSERIAL型を指定していた場合、シーケンス(sequence)により管理されています。
テーブルのプライマリキーとシーケンスは連動していないため、nextval()を使用せずidを直接指定した場合はシーケンスとのずれが発生することがあります。

プライマリキーとシーケンスを同期させるには、次のようにします。

SELECT SETVAL ('users_id_seq', (SELECT MAX(id) FROM users));

idの値を指定してINSERTしたときには、プライマリキーとシーケンスを同期させるようにしたほうがよいです。

関連記事

スポンサーリンク

UPPER関数 大文字に変換する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る