アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

PostgreSQLで自動採番がズレる(主キー重複エラーが出る)

「何もしてないのに動かなくなった」のよくあるやつ。

アプリは何も改修してないのに、登録系処理を動かすとエラーがでるようになった…
ログを見てみるとDuplicate Keyしてる。
いや、ここのPKはsequenceじゃん。なんで???

となったときにはほぼ確実に
「sequenceの値が更新されておらず、古いのを使おうとして重複してる」
というパターン。

なんでそんなことになるのかはいまいち分かっていませんが、
テストデータをざっくりINSERTしたりした後に発生しやすい気がします。

とにかく、sequenceの値を新しくしてやればいいので、以下クエリをぶん投げればOK。

SELECT SETVAL('sequence名', (SELECT MAX(PK名) FROM テーブル名));

以下のクエリでPKの最大値を取れるので、それをsequenceにsetしている、という感じですね。
ということで、データをごっそり削除したあとでsequenceもリセットしたい、という場合にも使えるはず。

SELECT MAX(PK名) FROM テーブル名