2015-10-16 22 views
0

想象一下这种情况。我有一台只有1 GB可用空间的服务器。一个Postgres数据库大约需要600MB(按照SELECT pg_size_pretty(pg_database_size('dbname'));),其他的东西是300MB,所以我只有100MB的可用空间。当空间紧张时转储Postgres数据库?

我想转储此数据库(转移到另一台服务器)。

当然,一个简单的pg_dump dbname > dump解决方案会失败,导致配额超出错误。

我试图首先用VACUUM FULL(不知道它是否对转储大小有帮助,但无论如何)将其压缩,但由于磁盘限制,它也失败了。

我有SSH访问此服务器。所以我想知道:有没有办法通过ssh输出pg_dump以便输出到我的主机?

(Ubuntu的安装在服务器上,并在本地机器上。)

其他建议亦欢迎。

回答

3

当然有。

在本地机器上做这样的事情:

ssh -L15432:127.0.0.1:5432 [email protected] 

然后在本地机器上,你可以这样做:

pg_dump -h localhost -p 15432 ... 

这将设置从端口15432隧道在本地框5432在遥控器上。假设权限等允许你连接,你很好去。

+0

谢谢,它有帮助。一个更正:pg_dump将采用'-p'选项(小写)作为端口。 – Arry

+0

谢谢。这是星期五晚上打字的危险。哦 - 你当然可以用完全相同的方式传输一个psql会话。 –

1

(如果机器连接到网络),你可以做一切从远程,给予足够的授权:从你的本地计算机

pg_dump -h source_machine -U user_id the_database_name >>the_output.dmp 

你甚至可以管笔直插入本地机器(服用后用户角色和DB的创造等保健):

pg_dump -h ${ORIG_HOST} -U ${ORIG_USER} -d ${ORIG_DB} \ 
    -Fc --create | pg_restore -c -C | psql -U postgres template1 
  • pg_dump的è xecutes地方(新)机
  • 上,但它连接到$ ORIG_HOST为用户$ ORIG_USER到DB $ ORIG_DB
  • pg_restore的也运行在本地机器上
  • pg_restore的是不是真的需要(在这里),但可以方便地删除/重命名/创建数据库等
  • psql在本地机器上运行,它接受来自管道的SQL和数据流,并将其执行/插入到(新创建的)数据库中
  • template1的连接只是一个存根,因为psql坚持使用数据库名称
  • 如果你想建立一个像这样的命令管道,你应该首先将|管道之一的东西替换为moreless,或者将其重定向到一个文件。
  • 您可能需要首先导入系统范围的东西(用户名和表空间)