Ответ 1
SELECT string_agg(id, ',') FROM table
Требуется PostgreSQL 9.0, но это не проблема.
Скажем, у вас есть запрос SELECT id from table
(реальный случай - это сложный запрос), который возвращает вам несколько результатов.
Проблема заключается в том, как вернуть все id
в одну строку, разделенные запятой?
SELECT string_agg(id, ',') FROM table
Требуется PostgreSQL 9.0, но это не проблема.
Вы можете использовать функции array() и array_to_string(), связанные с вашим запросом.
С помощью SELECT array( SELECT id FROM table );
вы получите результат, например: {1,2,3,4,5,6}
Затем, если вы хотите удалить знаки {}, вы можете просто использовать функцию array_to_string() и использовать запятую как разделитель, поэтому: SELECT array_to_string( array( SELECT id FROM table ), ',' )
получит результат вроде: 1,2,3,4,5, 6
Вы можете сгенерировать CSV из любого SQL-запроса с помощью psql:
$ psql
> \o myfile.csv
> \f ','
> \a
> SELECT col1 AS column1, col2 AS column2 ... FROM ...
В результате myfile.csv будет иметь имена столбцов набора результатов SQL как заголовки столбцов CSV, а кортежи запросов - как строки CSV.
h/t http://pookey.co.uk/wordpress/archives/51-outputting-from-postgres-to-csv
использовать array_to_string() & Функция array() для того же.
select array_to_string(array(select column_name from table_name where id=5), ', ');