Функция удаления полей в данных JSONB
Если уже есть заполненные данные в body какого то Приложения и была правка метаданных в базе с удалением полей, при обновлении элемента приложения система будет ругаться. Чтобы почистить данные в body, необходимо в схеме создать функцию:
-- head - название схеме (площадки ELMA365)
CREATE OR REPLACE FUNCTION head.json_object_delete_keys("json" json, VARIADIC "keys_to_delete" TEXT[])
RETURNS json
LANGUAGE sql
IMMUTABLE
STRICT
AS $function$
SELECT COALESCE(
(SELECT ('{' || string_agg(to_json("key") || ':' || "value", ',') || '}')
FROM json_each("json")
WHERE "key" <> ALL ("keys_to_delete")),
'{}'
)::json
$function$;
После этого выполнить запрос по очистке данных:
-- где 'type', 'signatory_position', 'base_action', 'set_bank_details' - поля к удалению внутри body
update head."_clients:_companies"
set body = head.json_object_delete_keys(body::json, 'type', 'signatory_position', 'base_action', 'set_bank_details');