PostgreSQLで自動採番がズレる(主キー重複エラーが出る)
「何もしてないのに動かなくなった」のよくあるやつ。
アプリは何も改修してないのに、登録系処理を動かすとエラーがでるようになった…
ログを見てみるとDuplicate Keyしてる。
いや、ここのPKはsequenceじゃん。なんで???
となったときにはほぼ確実に
「sequenceの値が更新されておらず、古いのを使おうとして重複してる」
というパターン。
なんでそんなことになるのかはいまいち分かっていませんが、
テストデータをざっくりINSERTしたりした後に発生しやすい気がします。
とにかく、sequenceの値を新しくしてやればいいので、以下クエリをぶん投げればOK。
SELECT SETVAL('sequence名', (SELECT MAX(PK名) FROM テーブル名));
以下のクエリでPKの最大値を取れるので、それをsequenceにsetしている、という感じですね。
ということで、データをごっそり削除したあとでsequenceもリセットしたい、という場合にも使えるはず。
SELECT MAX(PK名) FROM テーブル名