Я использую psql \dt
для отображения всех таблиц в базе данных, и мне нужно сохранить результаты.
Каков синтаксис для экспорта результатов команды psql в файл?
Я использую psql \dt
для отображения всех таблиц в базе данных, и мне нужно сохранить результаты.
Каков синтаксис для экспорта результатов команды psql в файл?
Из справки 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
Команда 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 или нет, но общий синтаксис воспроизводится по следующей ссылке Синтаксис копирования 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;
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
эта команда используется для хранения всей таблицы как csv
Если вы получили следующую ошибку
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
Я предполагаю, что для этого существует некоторая внутренняя команда psql, но вы также можете запустить команду script
из util-linux-ng package:
ОПИСАНИЕ Script делает typescript всего, что было напечатано на вашем терминале.
Используйте запрос ниже, чтобы сохранить результат в CSV файле
\ скопируйте (ваш запрос) в csv заголовок 'путь к файлу';
Пример
\ скопируйте (выберите name, date_order из purchase_order) в '/home/ankit/Desktop/result.csv' заголовок cvs;
Надеюсь, это поможет вам.