У меня есть два массива, как показано ниже, поскольку я объединяю оба массива - значение ключа ST в Array1 заменяется значениями в ST значениях ключей в Array2,
Массив 1:
{"ST": ["Bin", "No", "Comp"], "OSS": ["Class"]}
Массив 2:
{"ST": ["Pro", "SU"]}"
Ожидаемый результат:
{"ST": ["Bin", "No", "Comp","Pro", "SU"], "OSS": ["Class"]}
Как мне этого добиться?
1) Вам необходимо четко указать, с чем вы работаете. Примеры выглядят как объекты JSON с массивами JSON в качестве значения ключа. Это не то же самое, что родной тип Postgres ARRAY . 2) Если это Postgres JSON(B) , то вам нужно прочитать Функции JSON.
Кажется, вопрос в том, чтобы '{"ST": ["Bin", "No", "Comp"]}'::jsonb || '{"ST": ["Pro", "SU"]}'::jsonb использовать второе значение вместо слияния. Это задокументированное поведение ||.

WITH js AS (
SELECT
'{"ST": ["Bin", "No", "Comp"], "OSS": ["Class"]}'::jsonb AS js_data
)
SELECT
jsonb_set(js_data, '{ST}',
jsonb_path_query_array(
js_data, '($.ST[*])') || '["Pro", "SU"]'::jsonb)
FROM
js
;
jsonb_set
--------------------------------------------------------------
{"ST": ["Bin", "No", "Comp", "Pro", "SU"], "OSS": ["Class"]}
При этом jsonb_path_query_array используется для извлечения существующего значения массива из "ST", а затем объединяет его с объединяемым массивом (jsonb_path_query_array). Затем jsonb_set заменяет текущий массив, связанный с ключом "ST", новым объединенным массивом, созданным в jsonb_path_query_array. CTE(WITH) используется, чтобы не повторять весь объект jsonb.
Следующее выполнит запрошенную операцию:
WITH demo AS (
SELECT
'{"ST": ["Bin", "No", "Comp"], "OSS": ["Class"]}'::jsonb AS array1,
'{"ST": ["Pro", "SU"]}'::jsonb AS array2
)
SELECT
array1 || JSONB_BUILD_OBJECT('ST', (array1 -> 'ST') || (array2 -> 'ST'))
FROM
demo;
Выражение работает путем создания нового элемента ST из значений объединенного массива из исходных элементов ST, а затем
использует преимущества поведения оператора ||, заключающегося в сохранении последнего значения, присвоенного общему именованному элементу, для создания окончательного JSON.
Оператор || недопустим для JSON, поэтому необходимо будет привести любые элементы JSON к JSONB.
Пожалуйста, просмотрите минимальный воспроизводимый пример. Обновите сообщение реальным кодом, демонстрирующим проблему. Похоже, вы пытаетесь объединить элементы массива в JSON, но в вашем описании это явно не указано.