通过 ssh 将 psql 输出保存到本地文件?

Save psql output to a local file over ssh?

我通过 ssh 连接到服务器并且 运行

psql

我想从服务器上提取数据库,但是我不能在远程保存文件,因为我没有写权限。如何保存到本地?

而不是

ssh myhost psql

使用 ssh 隧道将本地 psql 连接到远程 PostgreSQL,因此您可以在本地 \copy 文件,例如

ssh -L 5599:localhost:5432 myhost

然后在该会话打开时,在 单独的本地 终端会话中:

psql -h localhost -p 5599

通过 ssh 隧道连接。这仅在远程系统允许来自本地主机 (127.0.0.1 / ::1) 的 tcp/ip 连接时才有效。它不必允许来自远程节点的 tcp/ip PostgreSQL 连接。


或者,您可以:

ssh myhost psql -c '"copy mytable to stdout"' > local_file.csv

通过 ssh 将 stdout 流式传输到本地文件。

注意引用的两层,因为本地shell消耗第一层而远程shell消耗第二层。


通常最好的解决方案是让 PostgreSQL 监听外部 public 端口,设置 SSL,并使用 pg_hba.conf 中的 hostssl 条目让您自己直接连接TCP/IP 使用 psql 和 SSL。那么你只需:

psql -h myhost