psql - сохранить результаты команды в файл - PullRequest
231 голосов
/ 16 марта 2011

Я использую psql's \dt, чтобы перечислить все таблицы в базе данных, и мне нужно сохранить результаты.

Каков синтаксис для экспорта результатов команды psql в файл?

Ответы [ 6 ]

390 голосов
/ 16 марта 2011

Из справки psql (\?):

\ o [ФАЙЛ] отправлять все результаты запроса в файл или | pipe

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

[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

db=>\o out.txt
db=>\dt
db=>\q

[wist@scifres ~]$ 
82 голосов
/ 17 марта 2011

Команда psql \o уже была описана jhwist.

Альтернативный подход - использовать команду COPY TO для прямой записи в файл на сервере.Преимущество этого в том, что он выводится в удобном для анализа формате по вашему выбору, а не в табличном формате psql.Также очень легко импортировать в другую таблицу / базу данных, используя COPY FROM.

Внимание!Это требует привилегий суперпользователя и записывает в файл на сервере .

Пример: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

Создает файл CSV с помощью ';'в качестве разделителя полей.

Как всегда, подробности см. в документации

18 голосов
/ 09 июля 2016

\copy, которая является командой postgres, может работать для любого пользователя. Не знаю, работает ли он для \ dt или нет, но общий синтаксис воспроизводится по следующей ссылке Синтаксис копирования Postgres SQL

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','

Приведенное выше сохранит выходные данные запроса выбора в файле с именем, предоставленным в виде файла csv

РЕДАКТИРОВАТЬ:

Для моего psql-сервера работает следующая команда это более старая версия v8.5

copy (select * from table1) to 'full_path_filename' csv header;
2 голосов
/ 20 ноября 2017

Если вы получили следующую ошибку ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

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

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv

2 голосов
/ 12 октября 2017

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; эта команда используется для сохранения всей таблицы как csv

1 голос
/ 16 марта 2011

Я предполагаю, что для этого существует некоторая внутренняя команда psql, но вы также можете запустить команду script из пакета util-linux-ng :

ОПИСАНИЕ Scriptделает машинописный текст всего, что напечатано на вашем терминале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...