原因の一つとして考えられるもの
id
を明示的に指定してレコードを作成した履歴がありませんか? seed のデータを投入する場合にやりがちです。
たとえば、以下のようにして user のレコードを作った場合です。
User.create( id: 100, name: 'taro', age: 24 )
なぜエラーになるのか
id
を明示的に指定してレコードを作った場合は、PostgreSQL の内部で自動採番が行われないので、 Active Record が自動で id を割り当てる際にバッティングするから*1。
どうすればいいか
レコードの追加の際には id
を明示的に指定しないようにします。もし id
を明示的に指定してレコードを追加したい場合には、レコード追加後に手動で採番を調整しましょう*2。
わかりやすい記事を書いてくださっている方がいらっしゃいます。
エラーメッセージの例
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint ......