Как вы печатаете результат запроса PostgreSQL в формате CSV или TSV из командной строки? - PullRequest
55 голосов
/ 29 июня 2011

Я хотел бы выполнить запрос из оболочки (не в интерактивном клиенте psql) и заставить его выводить CSV или TSV-представление вывода в STDOUT. Как это сделать с psql или одним из инструментов командной строки PostgreSQL?

Ответы [ 7 ]

91 голосов
/ 29 июня 2011

Если вы используете PostgreSQL 8.2 или новее, используйте это для CSV:

psql -c "COPY (<select query>) TO STDOUT WITH CSV"

и это из TSV с правильными значениями NULL:

psql -c "COPY (<select query>) TO STDOUT WITH NULL AS ''"

Форма CSV будет правильно заключать в кавычки любые поля, содержащие символ двойной кавычки. Обратитесь к документации PostgreSQL вашей конкретной версии для получения дополнительной информации и опций для COPY.

36 голосов
/ 20 сентября 2011

Начиная с ответа Богемяна, я нашел эти флаги полезными:

psql my_database -U myuser -A -F , -X -t -f /path/to/query.sql -o /path/to/output.csv
  • Режим невыровненного вывода: -A
  • Использовать запятую в качестве разделителя полей: -F,
  • Не читать psqlrc: -X
  • Только кортежи (без колонтитула): -t
  • Файл, содержащий запрос SQL: -f
  • Выходной файл: -o
7 голосов
/ 29 июня 2011

РЕДАКТИРОВАНИЕ: Использование -F

Используйте запятые через -F и используйте "режим вывода таблицы без выравнивания" -A:

psql my_database -U myuser -A -F , -c "select * from mytable"
5 голосов
/ 05 апреля 2017

Чтобы указать tsv , используйте разделитель '\ t'

psql my_database -U myuser -F'\t' --no-align -f mysqlfile.sql -o outputfile.tsv

Чтобы указать csv , используйте разделитель ','

psql my_database -U myuser -F',' --no-align -f mysqlfile.sql -o outputfile.csv
4 голосов
/ 29 июня 2011

Также возможна команда copy , которая позволяет указывать заголовок, разделители и параметры цитирования

psql my_database -U my_user -c "copy (select a.id,b.id from my_table_a as a inner join my_table_b as b on b.id = a.id) to STDOUT"
3 голосов
/ 29 июня 2011

Вы можете указать разделитель полей с параметром командной строки -F для psql

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

Экспорт в формате TSV с заголовком

Вы можете включить заголовок следующим образом:

\COPY (SELECT * FROM tca) TO '/.../metab/tca.tsv' WITH DELIMITER E'\t' CSV HEADER;

\COPY (SELECT * FROM tca) TO '/...a/metab/tca.tsv' WITH NULL AS '' DELIMITER E'\t' CSV HEADER;

например. (PSQL):

[metabolism]# \COPY (SELECT * FROM tca) TO '/mnt/Vancouver/programming/data/metabolism/tca.tsv' WITH NULL AS '' DELIMITER E'\t' CSV HEADER;
COPY 22

BASH:

[victoria@victoria tsv]$ pwd
/mnt/Vancouver/programming/data/metabolism/tsv

[victoria@victoria tsv]$ head -n3 tca.tsv
uuid    src tgt rel rel_type
878b87de-0ca8-49a8-9f77-a24353e251d2    oxalosuccinic acid  oxoglutaric acid    1.1.1.42    2
7fd9cf88-495b-491b-956e-294f19097923    isocitric acid  oxoglutaric acid    1.1.1.41    2
[victoria@victoria csv]$ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...