不同大小的postgres数据库。将db从server1移动到server2

时间:2014-08-04 08:09:15

标签: postgresql database-backups psql

我试图将数据库从server1移到server2。我阅读了postgres的docummentation,我认为一切都是正确的,除了我从server1转储db后移动它并在server2上恢复大小不同。

服务器1

 SELECT pg_size_pretty(pg_database_size('db_name'));                                                                                                   
 pg_size_pretty 
----------------
 118 MB
(1 row)

服务器2

 select pg_size_pretty(pg_database_size('db_name'));
 pg_size_pretty 
----------------
 81 MB
(1 row)

我已使用-a -Fc -Z9标记进行转储,并使用pg_restore -U user -c -d db_name dump_file.dump恢复

我的问题是:

  • 为什么尺寸不同?
  • 如果访问数据库的应用程序是rails,那么移动这样的数据库的正确方法是什么? (我的意思是,我希望还原不会影响未来的rails迁移)
  • 你有其他想法吗?我能读到的其他文件吗?

感谢您阅读本文。

1 个答案:

答案 0 :(得分:3)

这很好而且很正常。

转储和重新加载会产生一个更紧凑的数据库,因为表中没有死区,并且b-tree索引是新重新索引的,因此它们被重新打包并且平衡良好。如果您:

,您会发现尺寸相同或更接近
VACUUM FULL;
REINDEX DATABASE mydb;

在主DB上。

但是,请注意,我强烈建议使用-1选项恢复pg_restore,除非您需要并行恢复。这样你就可以得到一个空DB或完全恢复。当然,您还应始终查看pg_dumppg_restore的返回代码。

没有评论Rails部分,我不知道你指的是什么。请不要做这样的多重问题,他们很难明确回答,你会变得与众不同"正确"不同部分的答案。为新问题发布一个新的SO问题。