请考虑以下表格定义:
CREATE TABLE keys
(
id bigint NOT NULL DEFAULT nextval('id_seq'::regclass),
key_value jsonb[] NOT NULL DEFAULT ARRAY[]::jsonb[],
)
该表现在包含以下值:
id | key_value
---|-----------
1 | {"{\"a\": \1\", \"b\": \"2\", \"c\": \"3\"}","{\"a\": \"4\", \"b\": \"5\", \"c\": \"6\"}","{\"a\": \"7\", \"b\": \"8\", \"c\": \"9\"}"} |
我如何:
b
的值不是2的所有行吗?我尝试使用@>运算符我的困惑源于一个事实,即postgres中处理JSONB的所有方法似乎都接受JSON或JSONB,但似乎都无法与JSONB []一起使用。不确定我缺少什么?
预先感谢
答案 0 :(得分:1)
有什么比用unnest
和常规关系操作更好的方法了?
array
类型和json
是可憎的。漏洞的第一个规则是,当您发现自己陷入困境时,停止挖掘并爬出漏洞。
with unwind as (
select id, unnest(key_value) as kvjson
from keys
)
select id, (kvjson->>'c')::int - (kvjson->>'a')::int as difference
from unwind
where kvjson->>'b' != '2';