Как экспортировать таблицу в формате CSV с заголовками в Postgresql?

StackOverflow https://stackoverflow.com/questions/1120109

Вопрос

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

Мой код выглядит следующим образом:

COPY products_273 to '/tmp/products_199.csv' delimiters',';
Это было полезно?

Решение

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

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

Другие советы

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

\COPY my_table TO 'filename' CSV HEADER

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

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

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;

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

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

Это работает

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

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

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

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

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

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

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

Затем сбросил данные в CSV-файл:

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

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

скопировать (любой SQL-запрос datawanttoexport) в разделитель 'fileabloutepathwihname',' csv-заголовок;

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top