Экспорт таблицы PostgreSQL в файл CSV с заголовками

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

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

Ответ 1

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

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

Ответ 2

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

\COPY my_table TO 'filename' CSV HEADER

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

Ответ 3

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

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;

Ответ 4

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

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv

Ответ 5

Это работает

psql dbname -F , --no-align -c "SELECT * FROM TABLE"

Ответ 6

Для версии 9.5 я использую это:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

Ответ 7

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

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"

Ответ 8

Вот как я получил рабочую силовую оболочку, используя 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' в качестве разделителя, поэтому я использовал ~ потому что его редко используется characeter.

Ответ 9

копировать (anysql query datawanttoexport) в 'fileablsoutepathwihname' delimiter ',' csv header;

Использование этого u также может экспортировать данные.

Ответ 10

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

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

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

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

Ответ 11

Кажется, для вывода имен столбцов не существует флаг COPY. Другой способ сделать это - выбрать информацию столбца из системный каталог (pg_catalog), вывести его в файл csv, запустить вашу копию и, наконец, cat два файла вместе.

В сети есть множество инструментов для экспорта, поэтому вы должны найти один шаг script, который делает это (или записывать свой собственный в bash или powershell).