В выборе я использовал array_to_string, как это (пример)
array_to_string(array_agg(tag_name),';') tag_names
Я получил результирующую строку "tag1;tag2;tag3;...", но я хотел бы получить результирующую строку как "'tag1';'tag2';'tag3';...".
Как я могу это сделать в Postgres?
@a_horse_with_no_name спасибо :)



Или используйте
array_to_string(array_agg(''''||tag_name||''''),';') tag_names
или даже проще (спасибо за комментарий :))
string_agg(''''||tag_name||''''),';') tag_names
Примечание:
When dealing with multiple-argument aggregate functions, note that the ORDER BY clause goes after all the aggregate arguments. For example, write this:
SELECT string_agg(a, ',' ORDER BY a) FROM table;
not this:
SELECT string_agg(a ORDER BY a, ',') FROM table; -- incorrect
См. https://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-AGGREGATES
Альтернативой здесь должна быть конкатенация строк, вы все равно должны использовать string_agg, а не array_to_string (array_agg ())
@eurotrash Спасибо :)!
Или вы можете использовать unnest, format, array_agg и array_to_string в одном запросе следующим образом:
select array_to_string(t.tag, ',')
from (
select array_agg(format('%L', t.tag)) as tag
from (
select unnest(tag_name) as tag
) t
) t;
array_to_string(array_agg(...))можно упростить доstring_agg()