Для этого нет встроенной функции, но вы можете легко написать свою собственную:
create function remove_numbers(p_array jsonb, p_nr variadic int[] )
returns jsonb
as
$$
select jsonb_agg(x)
from jsonb_array_elements(p_array) as t(x)
where t.x::int <> ALL(p_nr);
$$
language sql
immutable;
Тогда вы можете использовать ее так:
select id, remove_numbers(json_data -> 'state', 4,5)
from t1
where id = 1;
Если вы предпочитаете чтобы передать значение массива JSON, вы можете определить функцию следующим образом:
create function remove_numbers(p_array jsonb, p_to_remove jsonb)
returns jsonb
as
$$
select jsonb_agg(x)
from jsonb_array_elements(p_array) as t(x)
where t.x not in (select *
from jsonb_array_elements(p_to_remove))
$$
language sql;
Тогда вам нужно будет использовать remove_numbers(json_data -> 'state', '[4,5]')