[postgresql]

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と互換にさせる対処方法ご存じの方教えて下さい。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/06/19 14:49:09
  • 終了:2013/06/26 14:50:03

回答(2件)

id:dawakaki No.1

だわかき回答回数797ベストアンサー獲得回数1222013/06/19 21:51:45

ポイント50pt

CREATE FUNCTIONしてからCREATE CASTしてください。

詳しくは下記サイトをご覧下さい。
http://lets.postgresql.jp/documents/tutorial/cast/

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492013/06/23 01:43:05

ポイント50pt

他にどのようなセッティングをしておられるのかわかりませんが、
integerのデフォルトは int2 ではなく int4 なので質問にあるCAST文には引っかからないです。

id:windofjuly

もちろん、CREATE FUNCTIONなんて古い方式は無関係です。

2013/06/23 01:44:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません