【发布时间】:2019-03-14 20:57:06
【问题描述】:
我有一个嵌套的 jsonb 列,我正在尝试使用 Postgres9.6 查询 jsonb 中的一个字段,该字段是一个值或者是那个确切的值
表:测试
Jsonb 列:数据
{
"subject":[
{
"test1": "blue",
"test2": "12",
"test3": "green"
},
{
"test1": "red",
"test2": "1234",
"test3": "green"
}
]}
我试过了:
SELECT * from test where data ->'subject'->>'test2' like '%12%';
还尝试了包含查询:
SELECT '{"test":{test1: "blue"}}' :: jsonb@> '{"test":{}}'::jsonb
最后,尝试访问 jsonb 元素但得到一个列“1234”不存在错误。
SELECT * FROM test
WHERE EXISTS (SELECT FROM jsonb_array_elements(test.data -> 'subject') as s
WHERE (s->'test2'= "1234"));
第一次运行,但我没有得到任何数据。
出错的功能
CREATE FUNCTION search_data (search text)
RETURNS setof test AS $$
SELECT *
FROM test t, jsonb_array_elements(t.data->'subject') e
WHERE e.value->>'test2' like '%search%';
$$ language sql stable;
【问题讨论】:
标签: json postgresql jsonb postgresql-9.6