PostgreSQL8.3のエラー:bpchar型の扱い(operator does not exist: character varying = integer at character 69)
select * from テーブル名 where カラム名1 = '0' and カラム名2 = 1
PostgreSQL 8.3より前では問題なかったと思うのだが、8.3だとこのSQLでは以下のようなエラーが発生した。
SQL実行中に以下のエラーが発生しました。
ERROR: operator does not exist: character varying = integer at character 69
原因は、「カラム名2」の型が「bpchar」というものだったのに「'」で数値を囲っていなかったからだった。
・・・勉強不足だが、bpchar型って初めて見た。
select * from テーブル名 where カラム名1 = '0' and カラム名2 = 1
↓
select * from テーブル名 where カラム名1 = '0' and カラム名2 = '1'
というように「'(アポストロフィー)」で数字の部分を囲ってやればエラーは解消する。
PostgreSQL8.3より前のバージョンだと、bpchar型という文字型っぽい型なのに「'(アポストロフィー)」を付け忘れていたとしても柔軟に動作してくれていたのだが、8.3からは厳しくなってるようだ。
この8.2と8.3でこういった細かな仕様が異なっていて、ちょっと面倒・・・。