ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

INSERT失敗の理由

PostgreSQLで、serial型が定義されているテーブルに対して、serial型のカラムを除いてINSERTを実行したら、エラーが発生した。

エラーの内容

ユニーク制約のカラムに同じ値を入れようとしたときのエラーが発生していた。

なぜエラー?

ユニーク制約はserial型のカラムにのみ設定されていて、serial型のカラムを除いてINSERTしていてエラーになるのは、意味がわからなかった。

原因判明

PostgreSQLは、serial型にするとシーケンスが作成されるが、次のINSERT時に使われる値を確認したら、既に使われている値になっていた。

以前INSERTしたときに、serial型のカラムも含めてINSERTしていたのか?

対処

INSERTするたびにエラーは発生するが、シーケンスの値は更新されるので、INSERT出来るようになるまで繰り返し実行した。

 

原因作ったのは自分なのかどうか、全然覚えてない。