ARRAY_AGG выдает ошибку «оператор не существует: текст ->>> неизвестно»

#json #postgresql

Вопрос:

Я получаю эту ошибку

ОШИБКА: оператор не существует: текст ->>> неизвестно

Когда я бегу

 SELECT ARRAY_AGG(data->>'promotion_data' || '-' || data->>'id')
  FROM data.persons
GROUP BY data->>'store_id'
 

но это работает

 SELECT ARRAY_AGG(data->>'promotion_data' || '-')
  FROM data.persons
GROUP BY data->>'store_id'
 

Я пытался привести к json, но все та же ошибка:

 SELECT ARRAY_AGG(data->>'promotion_data' || '-' || data::json->>'id')
  FROM data.persons
GROUP BY data->>'store_id'
 

Комментарии:

1. Что это за версия PostgreSQL?

2. Решается с помощью a_horse_with_no_name

Ответ №1:

Используйте круглые скобки:

 ARRAY_AGG((data->>'promotion_data') || '-' || (data->>'id'))
 

|| Похоже, у него более высокий приоритет, чем у ->> оператора.

В качестве альтернативы вы можете использовать concat_ws()

 ARRAY_AGG(concat_ws(',', data->>'promotion_data', data->>'id'))
 

Комментарии:

1. Странно — приоритет ->> || перед всеми версиями, которые у меня здесь есть (9.4 и выше).