У меня есть таблица в Postgresql, в которой есть столбец jsonb.Этот столбец может иметь 3 типа данных в следующей структуре:
[]
, если результат пустой; [{"items": [{"name": "item1", "value": "value1", "messages": []}]}]"
[{"items": [{"name": "error", "value": "some error", "messages": []}]}]
Если первый элемент не является ошибкой, я должен показать данные.А также у меня есть интерфейс, чтобы получить все ошибки.Я использую COUNT WHERE FILTER
, чтобы получить счетчик пустых и ошибок, и он работает.
Это пример запроса:
SELECT COUNT(*) FILTER (WHERE t1.my_column = '[]' OR items -> 'items' -> 0 ->> 'name' = 'error') --This works
FROM my_table t1
LEFT JOIN jsonb_array_elements(CAST(t1.my_column AS jsonb)) AS items ON TRUE
Но когда я пытаюсь использовать его надругой запрос возвращает cannot extract elements from an object
:
SELECT t1.id, t1.column1, ...
FROM my_table t1
LEFT JOIN jsonb_array_elements(CAST(t1.my_column AS jsonb)) AS items ON TRUE
WHERE t1.my_column <> '[]' --This works
OR items -> 'items' -> 0 ->> 'name' <> 'error' --This doesn't
Кажется, он не может извлечь данные из пустого массива, но на самом деле я не знаю, как заставить его работать в обоих случаях.
Может ли кто-нибудь мне помочь?