使用pg_dump进行升级
第一个,如果可能,建议使用较新(9.3)版本的二进制文件转储旧版本(9.1),并将其恢复到由较新版本创建的新集群上.
通常,这种方法较慢,但也是最可行的方法.使其更快的一个提示是使用并发.要使用并行作业转储,您可以执行以下操作:
$pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
您必须为每个数据库执行此操作,将–jobs = 4值调整为任何值(测试从2到核数的某些值,并查看哪个值提供更好的速度).此外,在此阶段,任何人都不应该被绑定到数据库,任何修改都会导致转储损坏(因为非安全选项–no-synchronized-snapshots).
之后,您可以使用pg_restore将转储恢复到新实例:
$createdb <options> -T template0 mydatabase $pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
之后,建议在您的数据库上运行ANALYZE:
$vacuumdb --analyze-only mydatabase
(如果你能负担得起时间,只运行 – 分析到VACUUM数据库并更新可见性图)
使用pg_upgrade进行升级
另一种选择是使用the contrib pg_upgrade
.使用–link方法,它提供了一种非常快速的升级Postgresql的方法.
在使用之前,您必须备份整个数据目录,因为在–link模式下,如果出现问题,您可能会丢失这两个数据(新旧).另外,阅读整个文档,特别是底部的notes(pg_upgrade有一些限制).
更新:
在运行definitive命令之前,请使用–check选项.此外,对于大型数据库,建议在屏幕会话中运行此命令.
使用基于触发器的复制工具升级
升级版本的另一个选择是使用基于触发器的复制工具.像Slony,Bucardo和Londiste.
这是需要尽可能减少停机时间的选项,但它是最难处理的选项.
为此,您需要构建一个主从,其中主服务器是您当前的版本(9.1),从服务器是新版本(9.3).然后,等待第一次同步(系统仍在生产中),然后关闭连接到数据库的所有人(停机时间从这里开始),等待奴隶赶上,促使它(奴隶)掌握和将所有客户端/应用程序重定向到此新版本.而且你已经完成了.
Slony文档提供了到upgrade PostgreSQL using Slony的分步骤.
哪一个选择
嗯,一如既往地依赖,恢复:
>转储恢复是最可靠的,但通常是最慢的(虽然并行性可以给出相当好的结果)
> pg_upgrade是几乎没有停机时间的最佳选择之一(如果可以使用,请参阅限制),它通常只需几分钟,即使对于大型数据库也是如此
>触发器复制,毫无疑问是最少停机时间(接近零),但实际上很难实现,我建议只有经验人员(在Postgresql和复制工具上).
我希望我能提供帮助.祝好运.