通过 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
我通过 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