なぜこれがうまくいかないのか誰にもわかりますか?マニュアルのセクション 9.15によると、->
オペレーターは JSON データ型の要素にアクセスする必要があります。情報スキーマは列が「json」型であると言っていますが、実際にはスカラー文字列のままのように見えます(表示されるときの引用符に注意してください)。
postgres=# create table jtest (id serial, data json);
CREATE TABLE
postgres=# select column_name, data_type from information_schema.columns where table_name = 'jtest';
column_name | data_type
-------------+-----------
id | integer
data | json
(2 rows)
postgres=# insert into jtest (data) values (to_json('{"k1": 1, "k2": "two"}'::text));
INSERT 0 1
postgres=# select * from jtest;
id | data
----+--------------------------------
1 | "{\"k1\": 1, \"k2\": \"two\"}"
(1 row)
postgres=# select data->'k1' from jtest;
ERROR: cannot extract element from a scalar
postgres=# select data::json->'k1' from jtest;
ERROR: cannot extract element from a scalar
postgres=# \q
$ pg_ctl --version
pg_ctl (PostgreSQL) 9.3beta2
アップデート:
私がやっているのとまったく同じように動作するはずであることを示すこれらの2つの投稿をこことここで見つけました。念のためにこれを試しました:
postgres=# select * from jtest where data ->> 'k2' = 'two';
ERROR: cannot extract element from a scalar
JSON 機能を取得するために必要なビルド オプションまたは contrib モジュールはありますか?