PostgreSQL|bpchar型で発生する「operator does not exist: character varying = integer」エラーの原因と対処方法

select * from テーブル名 where カラム名1 = '0' and カラム名2 = 1
PostgreSQL 8.3より前では問題なかったと思うのだが、8.3だとこの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'

というように「'(アポストロフィー)」で数字の部分を囲ってやればエラーは解消する。

PostgreSQL 8.3より前のバージョンだと、bpchar型という文字型っぽい型なのに「'(アポストロフィー)」を付け忘れていたとしても柔軟に動作してくれていたのだが、8.3からは厳しくなってるようだ。
この8.2と8.3でこういった細かな仕様が異なっていて、ちょっと面倒......。

前へ

「W-ZERO3[es]」機種変更キャンペーンのお知らせ【WILLCOM Info】・・・というメールが届いた

次へ

PostgreSQL|bpchar Type and the "operator does not exist: character varying = integer" Error