Экспорт таблицы PostgreSQL в файл CSV с заголовками - PullRequest
384 голосов
/ 13 июля 2009

Я пытаюсь экспортировать таблицу PostgreSQL с заголовками в файл CSV через командную строку, однако получаю ее для экспорта в файл CSV, но без заголовков. Мне также нужны эти заголовки. Мой код выглядит следующим образом

COPY products_273 to '/tmp/products_199.csv' delimiters',';

Ответы [ 10 ]

561 голосов
/ 13 июля 2009
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

как описано в руководстве .

198 голосов
/ 19 июня 2012

Из командной строки psql:

\COPY my_table TO 'filename' CSV HEADER

без точки с запятой в конце.

106 голосов
/ 09 октября 2015

вместо только имени таблицы вы также можете написать запрос для получения только данных выбранного столбца.

COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

с правами администратора

\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
88 голосов
/ 01 декабря 2016

Когда у меня нет разрешения на запись файла из Postgres, я обнаруживаю, что могу выполнить запрос из командной строки.

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
31 голосов
/ 13 января 2012

Это работает

psql dbname -F , --no-align -c "SELECT * FROM TABLE"
8 голосов
/ 09 апреля 2017

Для версии 9.5, которую я использую, это будет выглядеть так:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
5 голосов
/ 04 июня 2018

Это решение работало для меня, используя \copy.

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
3 голосов
/ 26 ноября 2016

Вот как у меня получилась работающая Power Shell с помощью pgsl connnect к базе данных Heroku PG:

Сначала мне нужно было изменить кодировку клиента на utf8 следующим образом: \encoding UTF8

Затем выгрузил данные в файл CSV:

\copy (SELECT * FROM my_table) TO  C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'

Я использовал ~ в качестве разделителя, потому что я не люблю файлы CSV, я обычно использую файлы TSV, но он не позволяет мне добавлять '\ t' в качестве разделителя, поэтому я использовал ~ потому что это редко используемый символ.

0 голосов
/ 27 июня 2019

Я публикую этот ответ, потому что ни один из других ответов, приведенных здесь, на самом деле не работал для меня. Я не мог использовать COPY из Postgres, потому что у меня не было правильных разрешений. Поэтому я выбрал «Экспорт строк сетки» и сохранил вывод как UTF-8.

Версия psql, предоставленная @Brian, также не сработала для меня по другой причине. Причина, по которой это не сработало, заключается в том, что, очевидно, командная строка Windows (я использовал Windows) сама вмешивалась в кодировку. Я продолжал получать эту ошибку:

ОШИБКА: символ с байтовой последовательностью 0x81 в кодировке "WIN1252" не имеет эквивалента в кодировке "UTF8"

Решение, которое я решил использовать, заключалось в написании короткого сценария JDBC (Java), который считывал файл CSV и выполнял операторы вставки непосредственно в мою таблицу Postgres. Это работало, но командная строка также работала бы, если бы она не изменяла кодировку.

0 голосов
/ 10 мая 2016

копировать (запрос данных любого запроса на экспорт) в 'fileablsoutepathwihname' разделитель ',' csv header;

С помощью этого вы также можете экспортировать данные.

...