Назад | Перейти на главную страницу

получение файла csv из запроса удаленного выбора

У меня есть клиентский хост Windows, который хотел бы подключиться к базе данных Postgres, выдать запрос выбора и вернуть этот запрос на хост Windows в виде файла CSV.

Я знаю, что у Postgres есть команда копирования, которая будет работать.

copy (SELECT * from foo) To '/tmp/forDavid.csv' with CSV DELIMITER ',';

И этот клиент будет получать доступ к этому запросу SELECT ежедневно. Клиентский хост Windows и база данных Postgres находятся во внутренней сети.

Я хочу избежать использования PHPMyAdmin, потому что он не сообразителен, я хочу, чтобы это было как можно проще. Я знаю Perl, но это потребует установки Perl на клиентском компьютере с Windows, чего я не хочу делать.

Какое решение этой задачи было бы наиболее простым?

Что вам нужно здесь сделать, так это использовать COPY ... TO STDOUT форма COPY, а затем захватить вывод, а затем захватить вывод в вашей локальной системе или приложении и записать его в свой локальный файл. Простой пример с использованием psql из командной строки (без использования psql \copy материал, и нет необходимости устанавливать разделитель на запятую, поскольку это значение по умолчанию для вывода CSV):

psql -U ejones -h remote_host.com -c "COPY (SELECT * FROM foo) TO STDOUT CSV;" somedb > /tmp/forDavid.csv

https://www.postgresql.org/docs/9.5/static/sql-copy.html