PostgreSQL -10: запросить свойство JSONB нескольких типов - PullRequest
2 голосов
/ 08 марта 2020

Предположим таблицу 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 должно иметь двойной тип целое число или строка. Это означает, что вышеупомянутый запрос обработает sh с

ERROR: invalid input syntax for integer: "d-string-value"

Я бы хотел избежать очевидного решения по созданию двух свойств d_id и d_name.

Итак, есть ли способ запросить свойство JSONB двойного типа?

1 Ответ

1 голос
/ 08 марта 2020

Как насчет приведения к тексту вместо этого?

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