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

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

古いプログラムを新しいPostgreSQLで利用する場合におきること

昔は大丈夫でも、最新では駄目というパターンです。

f:id:AJYA:20130124215205j:plain

photo credit: Jeff Kubina via photopin cc

 

ことの起こり

2010年に作成したプログラムを動作させる必要がでてきました。

データベースはバックアップしてあったので、元々PostgreSQL 8系列で作られていたので、8系列で最新版の環境に復元して、動作をさせました。

 

動作確認をした結果

SQLでエラーが発生していました。

内容を読むと、型が一致していないようです。

SQLを確認すると、WHEREに、

name(文字列型のカラム) = 1

となっていたので、

name(文字列型のカラム) = '1'

と変更して、文字列同士の比較になって、エラーは発生しなくなりました。

 

なぜ発生していたのか

以前は暗黙の型変換で、都合よくPostgreSQLが型を変換してくれていたのが、バージョン 8.3から厳密に型をチェックするようになったようで、今回のエラーが発生していました。

 

確かに文字列と数値を比較するのはおかしいので、厳密に型をチェックするのは賛成ですが、過去のバージョンで動いていたのが動かなくなるのは、あまりうれしくありません。

できれば、以前のバージョンから厳密に型をチェックしていて欲しかったです。