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

277

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

COPY products_273 to '/tmp/products_199.csv' delimiters',';
  • 0
    Вы используете postgres> = 8.1?
  • 0
    PostgreSQL 7.3.4
Показать ещё 2 комментария
Теги:
postgresql-copy

9 ответов

393
Лучший ответ
COPY products_273 TO '/tmp/products_199.csv' DELIMITER ',' CSV HEADER;

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

  • 6
    Имейте в виду, что аргумент HEADER не был введен до 8.1.
  • 5
    Который, скажем, немного ржавый.
Показать ещё 13 комментариев
147

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

\ скопировать my_table в 'filename' csv header

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

  • 19
    эта версия безусловно лучшая, так как команда COPY требует прав администратора
  • 2
    Также с помощью подхода psql можно сохранять выходные данные в любом месте, к которому у них есть доступ. Я просто использовал подход psql для получения данных с удаленного сервера в локальный файл. Очень гладко
Показать ещё 5 комментариев
68

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

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;
  • 0
    Я не верю, что вам нужна завершающая точка с запятой в psql-версии команды ( \COPY ... ). И, по крайней мере, в моей версии psql (9.5.2) мне не нужно было указывать «DELIMITER»; по умолчанию была запятая.
  • 2
    во время записи показывает ошибку «Отказано в доступе»
Показать ещё 1 комментарий
29

Это работает

psql dbname -F , --no-align -c "SELECT * FROM TABLE"
  • 9
    Ницца. Обратите внимание, что это, кажется, не экранирует запятые внутри полей, которые их содержат.
  • 0
    Мне нравится это, без -F , , и использовать | в качестве разделителя. Спасибо!
Показать ещё 2 комментария
28

Когда у меня нет разрешения на запись файла из 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
    Лучшее для "любой среды". Лучше всего для 1. Не нужны специальные разрешения в Postgresql или на клиенте; 2. можете использовать относительный путь; и 3. безопасен для реального формата CSV (безопасные цитаты).
5

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

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

Вот как я получил рабочую силовую оболочку, используя 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.

1

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню