![从远程选择查询获取 csv 文件](https://linux22.com/image/707506/%E4%BB%8E%E8%BF%9C%E7%A8%8B%E9%80%89%E6%8B%A9%E6%9F%A5%E8%AF%A2%E8%8E%B7%E5%8F%96%20csv%20%E6%96%87%E4%BB%B6.png)
我有一个客户端 Windows 主机,想要连接到 Postgres 数据库,发出选择查询并将该查询返回到 Windows 主机 CSV 文件。
我确实知道 Postgres 有一个可以工作的复制命令。
copy (SELECT * from foo) To '/tmp/forDavid.csv' with CSV DELIMITER ',';
并且该客户每天都会访问此 SELECT 查询。客户端 Windows 主机和 Postgres 数据库位于内部网络上。
我想避免使用 PHPMyAdmin,因为他不太懂,我希望这尽可能简单。我确实知道 Perl,但这需要将 Perl 安装到客户端 Windows 主机上,而我不想这样做。
这个任务最简单的解决方案是什么?
答案1
您在这里要做的是使用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