rails6 DB書き込み時エラー「ERROR: duplicate key value violates unique constraint」が発生した場合の対処法
rails6で、APIでpost時にエラー「ERROR: duplicate key value violates unique constraint」が発生した場合の対処法を記述してます。railsのバージョンは6.1.0です。
環境
- OS ubuntu20.10
- ruby 2.7.2
- rails 6.1.0
- Postgresql 13.1 (dockerで構築)
エラー全文
APIでpost実行時に発生。
※プライマリキーの制約名は「customers_pkey」
ActiveRecord::RecordNotUnique in Api::CustomersController#create
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "customers_pkey"
DETAIL: Key (id)=(6) already exists.
対象テーブル
原因
DB側のシーケンス値を、誰かがリセットしていたために発生。
対処法
DB側のテーブルのシーケンス値を正しく設定してあげる
SELECT setval('customers_id_seq', coalesce((SELECT MAX(id)+1 FROM customers), 1), false);
構文
SELECT setval('テーブル名_id_seq', coalesce((SELECT MAX(id)+1 FROM テーブル名), 1), false);
以下を実行して、postできることが確認できました。
curl -X POST localhost:3000/api/customers -d 'customer[name]=test&cust
omer[email]=test@test.com'
-
前の記事
C# 文字列の文字を反転させる 2021.01.08
-
次の記事
javascript canvasタグに影やぼかしをつける 2021.01.08
コメントを書く