谁能明白为什么这不起作用?根据手册第 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
更新:
我在这里和这里发现了这两个帖子,表明它应该完全按照我的方式工作。只是为了确定我试过这个:
postgres=# select * from jtest where data ->> 'k2' = 'two';
ERROR: cannot extract element from a scalar
是否有我需要获取 JSON 功能的构建选项或贡献模块?