Вывод определенных словарей из списка

В таблице имеется колонка товара name_column JSONB[].

name_column = ARRAY[{"id": 1, "valid": true},
                    {"id": 2, "valid": false},
                    {"id": 3, "valid": false},
                    {"id": 4, "valid": true}]

Меня волнует как можно вывести именно те словари, в которых valid = true. Проблема в том, что при таком запросе SELECT * FROM table_name WHERE name_column -> 0 -> 'valid' = true; выдает ошибку ERROR: operator does not exist: jsonb[] -> integer


Ответы (1 шт):

Автор решения: asanisimov
SELECT *
FROM
    (SELECT unnest(name_column) as value
    FROM schema.table) ff
WHERE (ff.value->>'valid')::bool is true;

Out:
"{""id"": 1, ""valid"": true}"
"{""id"": 4, ""valid"": true}"

Функция unnest распаковывает массив в колонку, а дальше уже выбираете по условию.

→ Ссылка