想象一下这种情况。我有一台只有1 GB可用空间的服务器。一个Postgres数据库需要大约600MB(按SELECT pg_size_pretty(pg_database_size('dbname'));
),其他300MB,所以我只有100 MB可用空间。
我想转储这个数据库(转移到另一台服务器)。
当然,pg_dump dbname > dump
的简单解决方案会因配额超出错误而失败。
我首先尝试使用VACUUM FULL
压缩它(不确定它是否对转储大小有帮助,但无论如何),但由于磁盘限制也失败了。
我有SSH访问此服务器。所以我想知道:有没有办法将pg_dump
的输出通过ssh传输,以便将它输出到我的家用机器上?
(Ubuntu既安装在服务器上又安装在本地计算机上。)
欢迎其他建议。
答案 0 :(得分:3)
当然有。
在本地计算机上执行以下操作:
Thread th = new Thread(new Runnable() {
public void run() {
while(true) {
//do stuff
try {
Thread.sleep(15000);
}
catch(InterruptedException ex) {}
}
}
});
th.start();
然后在您的本地计算机上,您可以执行以下操作:
ssh -L15432:127.0.0.1:5432 user@remote-machine
这将设置从本地盒子上的端口15432到远程端口上的5432的隧道。假设权限等允许你连接,你很高兴。
答案 1 :(得分:1)
(如果机器已连接到网络),只要有足够的授权,您就可以从远程执行所有操作:
来自您当地的机器:
pg_dump -h source_machine -U user_id the_database_name >>the_output.dmp
您甚至可以直接将其管道传输到本地计算机上(在处理用户角色和创建数据库之后等):
pg_dump -h ${ORIG_HOST} -U ${ORIG_USER} -d ${ORIG_DB} \
-Fc --create | pg_restore -c -C | psql -U postgres template1
template1
的连接只是一个存根,因为psql坚持使用数据库名称进行调用|
或more
替换其中一个less
管道之后的东西,或者将其重定向到一个文件。