Postgres查询包含内容的JSON数组
Postgres有这个JSON数据类型,我想知道如何在JSON数组中查询数据? 我正在使用Postgres 9.3.1
我已插入到PUBLISHER表中,其中包含以下两个字段的名称:string和data:json
INSERT INTO PUBLISHER (name, data) VALUES ('PUB1', [{"code":"PA1","author":"James","type":"Novel"},{"code":"PA2","author":"John","type":"Science"}] INSERT INTO PUBLISHER (name, data) VALUES ('PUB2', [{"code":"PA1","author":"Dickens","type":"Novel"},{"code":"PA2","author":"Tom","type":"Comic"}]
我想查询并列出“Novel”类型的作者。 在这种情况下,应该是输出的“詹姆斯”和“汤姆”。
这种查询的东西:
select name, authorfromdata from publisher where data->type is "Novel"
您可以使用json_array_elements
函数从数组生成SETOF json
:
SELECT name, json_array_elements(data) AS author FROM publisher
有了它,你可以将它用作子查询,这样你就可以过滤你想要的东西,例如:
SELECT DISTINCT author->>'author' FROM ( SELECT name, json_array_elements(data) AS author FROM publisher ) t WHERE t.author->>'type' = 'Novel';
请注意,如果此表中有许多行,则此类查询的性能(至少对于当前版本9.3)将非常糟糕。 我建议你将数据规范化为表格。