postgresql 8.3以降、型変換のチェックが厳しくなったようで
8.1で問題なかった下記SQLが9.1ではエラーを起こすようになりました。
varchar で定義されているフィールドを数値で検索したい
select * from t_sample where varcharcol = 1
ERROR: operator is not unique: character varying = integer at character 45
HINT: Could not choose a best candidate operator. You might need to add explicit type casts.
もちろん文字列型で検索するように''で囲んで
select * from t_sample where varcharcol = '1'
とするとエラーにはならないのですが、アプリケーション内で利用しているため
できればアプリケーションをなおさずに対処したいと考えています。
暗黙変換を期待して下記CAST文を投入したのですが、自動変換してくれないようです。
CREATE CAST (int2 AS varchar) WITH INOUT AS IMPLICIT;
CREATE CAST (varchar AS int2) WITH INOUT AS IMPLICIT;
8.3以前のversionと互換にさせる対処方法ご存じの方教えて下さい。
CREATE FUNCTIONしてからCREATE CASTしてください。
詳しくは下記サイトをご覧下さい。
http://lets.postgresql.jp/documents/tutorial/cast/