PostgreSQL-10:查询具有多种类型的 JSONB 属性
PostgreSQL-10: query JSONB property with multiple types
假设 table json_table
有一个列 data (jsonb)
。样本值为
{"a": [{"b":{"c": "xxx", "d": 1}},{"b":{"c": "xxx", "d": 2}}]}
我曾经 运行 SQL 查询如下:
SELECT data
FROM json_table j
WHERE NOT EXISTS (SELECT 1
FROM jsonb_array_elements(j.data#>'{a}') dt
WHERE (dt#>>'{b,d}')::integer IN (2, 4, 6, 9)
);
问题是现在 属性 d
需要有一个双重类型,整数或字符串。这意味着上述查询将因
而崩溃
ERROR: invalid input syntax for integer: "d-string-value"
我想避免创建两个属性 d_id
和 d_name
的明显解决方案。
那么,有什么方法可以查询双重类型的 JSONB 属性?
转换为文本怎么样?
WHERE (dt#>>'{b,d}')::text IN ('2', '4', '6', '9')
假设 table json_table
有一个列 data (jsonb)
。样本值为
{"a": [{"b":{"c": "xxx", "d": 1}},{"b":{"c": "xxx", "d": 2}}]}
我曾经 运行 SQL 查询如下:
SELECT data
FROM json_table j
WHERE NOT EXISTS (SELECT 1
FROM jsonb_array_elements(j.data#>'{a}') dt
WHERE (dt#>>'{b,d}')::integer IN (2, 4, 6, 9)
);
问题是现在 属性 d
需要有一个双重类型,整数或字符串。这意味着上述查询将因
ERROR: invalid input syntax for integer: "d-string-value"
我想避免创建两个属性 d_id
和 d_name
的明显解决方案。
那么,有什么方法可以查询双重类型的 JSONB 属性?
转换为文本怎么样?
WHERE (dt#>>'{b,d}')::text IN ('2', '4', '6', '9')