古いプログラムを新しいPostgreSQLで利用する場合におきること
昔は大丈夫でも、最新では駄目というパターンです。
photo credit: Jeff Kubina via photopin cc
ことの起こり
2010年に作成したプログラムを動作させる必要がでてきました。
データベースはバックアップしてあったので、元々PostgreSQL 8系列で作られていたので、8系列で最新版の環境に復元して、動作をさせました。
動作確認をした結果
SQLでエラーが発生していました。
内容を読むと、型が一致していないようです。
SQLを確認すると、WHEREに、
name(文字列型のカラム) = 1
となっていたので、
name(文字列型のカラム) = '1'
と変更して、文字列同士の比較になって、エラーは発生しなくなりました。
なぜ発生していたのか
以前は暗黙の型変換で、都合よくPostgreSQLが型を変換してくれていたのが、バージョン 8.3から厳密に型をチェックするようになったようで、今回のエラーが発生していました。
確かに文字列と数値を比較するのはおかしいので、厳密に型をチェックするのは賛成ですが、過去のバージョンで動いていたのが動かなくなるのは、あまりうれしくありません。
できれば、以前のバージョンから厳密に型をチェックしていて欲しかったです。