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

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

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

Ответ 1

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

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

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

[[email protected] ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

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

Ответ 2

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

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

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

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

Создает файл CSV с ';' как разделитель полей.

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

Ответ 3

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

\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;

Ответ 4

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

Ответ 5

Если вы получили следующую ошибку 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 \copy command also works for anyone.

Вы можете запустить его таким образом:

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

Ответ 6

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

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

Ответ 7

Используйте запрос ниже, чтобы сохранить результат в CSV файле

\ скопируйте (ваш запрос) в csv заголовок 'путь к файлу';

Пример

\ скопируйте (выберите name, date_order из purchase_order) в '/home/ankit/Desktop/result.csv' заголовок cvs;

Надеюсь, это поможет вам.