2011.
05.
22
08:54:48
PostgreSQL+PHPのお仕事をいただいてやっていたのですが、
配列型のカラムを使っているテーブルがありました。
あー・・嫌いなんだよなぁ、配列型。
とは言っても選り好み出来る立場でも無いので
やるとしますか。
ちなみにテーブル(tbl_hoge)に配列型のカラム(array_column)があるとして
配列型のカラムを検索条件に使いたい場合は
完全一致 → tbl_hoge.array_column = ほげほげ
含まれる → tbl_hoge.array_column @> ほげほげ
共通要素を持つ → tbl_hoge.array_column && ほげほげ
となります。
まぁ他にも色々あったりするみたいですがどーでもいーや。
取りあえずこれだけ覚えておけば何とかなるでしょ?
ほんでまぁ、適当に実装してSQLを流してみたのですが
以下のようなエラーが出たのですよ。
aaa=# select * from tbl_hoge where array_column @> array[24,25,26,27,28];
ERROR: operator does not exist: integer[] @> integer[]
HINT: No operator matches the given name and argument type(s).
You may need to add explicit type casts.
エラー自体は型が不一致ですよのエラーなのですが・・・
どっちもinteger[]だけど駄目なの(--?
あれやこれやとやっても駄目。
select * from tbl_hoge where CAST(array_column AS integer[]) @> CAST(array[24,25,26,27,28] AS integer[]);
とか悪あがきしてもやっぱり駄目。
結局妥協して
select * from tbl_hoge
where 24 = ANY(array_column)
and 25 = ANY(array_column)
and 26 = ANY(array_column)
and 27 = ANY(array_column)
and 28 = ANY(array_column)
;
とかやって終わりにしちゃったんだけど
誰か分かる人がいたら教えて下さいm(__)m
配列型のカラムを使っているテーブルがありました。
あー・・嫌いなんだよなぁ、配列型。
とは言っても選り好み出来る立場でも無いので
やるとしますか。
ちなみにテーブル(tbl_hoge)に配列型のカラム(array_column)があるとして
配列型のカラムを検索条件に使いたい場合は
完全一致 → tbl_hoge.array_column = ほげほげ
含まれる → tbl_hoge.array_column @> ほげほげ
共通要素を持つ → tbl_hoge.array_column && ほげほげ
となります。
まぁ他にも色々あったりするみたいですがどーでもいーや。
取りあえずこれだけ覚えておけば何とかなるでしょ?
ほんでまぁ、適当に実装してSQLを流してみたのですが
以下のようなエラーが出たのですよ。
aaa=# select * from tbl_hoge where array_column @> array[24,25,26,27,28];
ERROR: operator does not exist: integer[] @> integer[]
HINT: No operator matches the given name and argument type(s).
You may need to add explicit type casts.
エラー自体は型が不一致ですよのエラーなのですが・・・
どっちもinteger[]だけど駄目なの(--?
あれやこれやとやっても駄目。
select * from tbl_hoge where CAST(array_column AS integer[]) @> CAST(array[24,25,26,27,28] AS integer[]);
とか悪あがきしてもやっぱり駄目。
結局妥協して
select * from tbl_hoge
where 24 = ANY(array_column)
and 25 = ANY(array_column)
and 26 = ANY(array_column)
and 27 = ANY(array_column)
and 28 = ANY(array_column)
;
とかやって終わりにしちゃったんだけど
誰か分かる人がいたら教えて下さいm(__)m
category:● PostgreSQL thema:システム開発 - genre:コンピュータ Posted by ササキマコト