Возникла у меня следующая задача: нужно сделать SELECT из базы данных и отправить результатирующую таблицу в CSV файл. Вопросов о том как написать запрос у меня не возникло. Я задался вопросом: "Какой самый простой способ сохранить это в CSV файл?". Не желая напрягаться я сразу определил свой запрос в просторы интернета следующим образом: "postgresql export table to csv". Мне казалось что такая возможность должна быть встроена в базу данных. Конечно такой функционал там есть. В postgres есть встроенная функция COPY. Давайте посмотрим её синтаксис.
COPY имя_таблицы [ ( имя_столбца [, ...] ) ]
FROM { 'имя_файла' | PROGRAM 'команда' | STDIN }
[ [ WITH ] ( параметр [, ...] ) ]
COPY { имя_таблицы [ ( имя_столбца [, ...] ) ] | ( запрос ) }
TO { 'имя_файла' | PROGRAM 'команда' | STDOUT }
[ [ WITH ] ( параметр [, ...] ) ]
FORMAT имя_формата
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'символ_разделитель'
NULL 'маркер_NULL'
HEADER [ boolean ]
QUOTE 'символ_кавычек'
ESCAPE 'символ_экранирования'
FORCE_QUOTE { ( имя_столбца [, ...] ) | * }
FORCE_NOT_NULL ( имя_столбца [, ...] )
FORCE_NULL ( имя_столбца [, ...] )
ENCODING 'имя_кодировки'
Функция COPY служит для копирования результата запроса в файловую систему и наоборот. Он поддерживает форматы TEXT, CSV, BINARY. В общем, достаточно полезная функция с которой я советую вам подробнее ознакомиться (например здесь). Я же ограничусь примером как выгрузить результат SELECT в CSV с сохранением заголовка таблицы.
COPY (/*Ваш SELECT * from something или что-то посложнее*/) TO '/path/to/file.csv' WITH CSV DELIMITER ';' HEADER;
Мне кажется дальнейшие разъяснения тут излишни. На этом, пожалуй, откланяюсь!