[pgsql-jp: 40064] postgreSQL 8.4.1 での自動キャストについて
skond66 @ mail.goo.ne.jp
skond66 @ mail.goo.ne.jp
2009年 11月 20日 (金) 15:20:36 JST
お世話になっております。先日から、8.1系→8.4.1への移行を検討しておりますが、
キャストの処理で悩んでおります。
問題点1 charに対してintで where条件を書くとエラーとなる。
character(8)のフィールドAに対し、select * from **** where A = 3;
8.1はOK。8.4は下記のエラー。
No operator matches the given name and argument type(s).
You might need to add explicit type casts
これへの対応として、キャストを明示していくのはコード量的に大変なため、lets.postgresqlの
ページを参照させていただき、
(http://lets.postgresql.jp/documents/tutorial/cast/)
CREATE CAST (int4 AS text) WITH FUNCTION int4text(int4) AS IMPLICIT;
こちらを実行することで、問題点1は解決いたしました。しかし、これを行うと
問題点2が発生するようになりました。
問題点2 || オペレータで 文字 と int が連結できない
8.1および問題点1の解決策を行う前の8.4ですと、select 'name' || 13 は name13を
返してくれますが、上記の解決策を行った後は下記のエラーとなります。
test=# SELECT 'name' || 13;
ERROR: operator is not unique: unknown || integer
LINE 1: SELECT 'name' || 13;
^
HINT: Could not choose a best candidate operator. You might need to add explicit type casts
.
こちらも、SELECT 'name' || 13::text といったようにキャストをすればよいのですが、
1よりは少ない数とはいえ、かなり大変であることと、この演算子 || だけの問題なのか
どうか、判断しかねています。何かよい方法はないものでしょうか?
pgsql-jp メーリングリストの案内