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_idd_name 的明显解决方案。

那么,有什么方法可以查询双重类型的 JSONB 属性?

转换为文本怎么样?

WHERE (dt#>>'{b,d}')::text IN ('2', '4', '6', '9')