Мне нужно объединить два значения JSON в одно. Но расположение этих переменных является динамическим, я получаю местоположения в jsonb из базы данных.
Так что я надеялся, что смогу сделать что-то вроде этого:
select '{"a": {"b": {"c": "d"}}}'::jsonb #> '{"a","b","c"}';
Но яне могу заставить его работать с переменными, так как я не знаю, к чему приводить путь.
select '{"a": {"b": {"c": "d"}}}'::jsonb #> ('{"a","' || variable_from_database || '","c"}')::dataTypeOfJsonbPath;
Я также обнаружил, что могу использовать такой запрос:
select value#>>'{"c"}' from jsonb_each(('{"a": {"b": {"c": "d"}}}'::jsonb#>'{"a"}')) where key = 'b';
Торешит проблему извлечения значений, но теперь мне нужно объединить их в исходное значение jsonb, и в настоящее время у меня нет идей о том, как это сделать.
jsonb_set('{"a": {"b": {"c": "d"}}}'::jsonb, ('{"a","' || value2FromDatabase || '", "c"}'),
(value1 || value2)::jsonb, false);
Вышеприведенный сбой для того жепричина.
Перечисление обязательных параметров для jsonb_set говорит мне, что второй параметр должен иметь тип ARRAY, но я не знаю, как привести эту строку к массиву, который сделает эту работу.
Может кто-нибудь указать мне правильное направление, как добавить одно значение к другому в объекте jsonb, где ключи обоих находятся в динамических местоположениях?