psql-сохранить результаты команды в файл

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

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

6 ответов


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

\o [FILE] отправить все результаты запроса в файл или |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 ~]$ 

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

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

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

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

создает CSV-файл с ';' в качестве разделителя полей.

как всегда Подробнее см. В документации


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

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

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

EDIT:

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

copy (select * from table1) to 'full_path_filename' csv header;

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

описание Script делает машинописный текст всего, что напечатано на вашем терминале.


Если вы получили следующую ошибку 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


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