Как отфильтровать элементы jsonb массива

Вроде бы распространённая задача, но решения не могу найти...

В хранимой функции в PostgreSQL есть массив в JSONB, нужно удалить из него элемент по значению.
Например, '[1,2,3,4,5]' нужно превратить в '[1,2,3,5]', т.е. удалить элемент со значением 4.

Вроде бы должно подойти выражение '$[*] ? (@ != 4)'::jsonpath
А для строк, возможно, и такое '$[*] ? (@ like_regex "^The")'

Но как его применить?

Если записать

SELECT '[1,2,3,4,5]'::jsonb @? '$[*] ? (@ != 4)'::jsonpath

То получаю true, а если так

SELECT '[1,2,3,4,5]'::jsonb @@ '$[*] ? (@ != 4)'::jsonpath

получаю null

Как получить новый jsonb-массив с отфильтрованными значениями?

PS Есть вариант решения через такую громоздкую конструкцию, но это из пушки по воробьям:

SELECT array_to_json(
    array(
        SELECT el FROM jsonb_array_elements('[1,2,3,4,5]') AS el WHERE el @? '$[*] ? (@ != 4)'
    )
) AS result;

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