如何将Postgres数据从8.4迁移到9.1?


27

我已经将我的ubuntu开发机器从11.04升级到了11.10。在此过程中,我的postgres也从8.4升级到9.1。

但是我似乎丢失了所有数据。如果看的话,可以看到8.4的数据在文件夹中,/var/lib/postgres/8.4/main而新数据库在/var/lib/postgres/9.1/main

将数据迁移到新版本的最佳方法是什么?我可以复制文件吗?

Answers:


27
su postgres
pg_dropcluster --stop 9.1 main    
pg_upgradecluster 8.4 main

最初,这对我不起作用有两个原因。首先,postgresql-8.4在某个时候没有被安装,所以我不得不重新安装它:

sudo apt-get install postgresql-8.4

然后我必须进入8.4 postgresql.conf并更改max_connections为10。然后它起作用了。您应该可以在以下位置找到conf文件/etc/postgresql/8.4/main/postgresql.conf


在一台计算机上,前三行就足够了。另一方面,正如您所说,我必须重新安装8.4才能正常工作。谢谢您的帮助。
nathanvda

应该注意的是,“ pg_upgradecluster”脚本不能处理必须提供数据库用户的情况。(如果确实如此,我肯定不知道该怎么提供。)
Pointy 2012年

如果您Error: specified cluster is not running在更改后再次尝试尝试max_connections,请使用pg_ctlcluster 8.4 main start
Skippy le Grand Gourou 2014年

减少max_connections对我没有用。作为错误消息提供的替代解决方案,我shared_buffers从200MB 减少到20MB,这对我有用。
塞拉诺2014年

4

升级到11.10后,安装了PostgreSQL 9.1,但正在运行的版本是8.4。

我试过了:

su postgres
pg_dropcluster --stop 9.1 main    
pg_upgradecluster 8.4 main

它报告了错误:

Stopping old cluster...
pg_ctl: servidor não desligou
Error: Could not stop old cluster

因此,在另一个窗口中:

$ sudo service postgresql-8.4 stop
 * Stopping PostgreSQL 8.4 database server                               [ OK ] 
jgr@cagliari:~$ sudo service postgresql-8.4 start
 * Starting PostgreSQL 8.4 database server                               [ OK ] 

然后再次:

pg_upgradecluster 8.4 main

报告了与pgRouting相关的错误。花了一段时间(整夜!),但是此后数据库升级到9.1。PostGIS也已升级到1.5.3。


仅供参考,我发现在/var/lib/postgresql/9.1目录中执行“ du -hs”,然后将其与/var/lib/postgresql/8.4/中相同命令的输出进行比较,我发现我可以根据该命令输出的大小,确定复制了多少内容。
Joe J

我知道这不是正在讨论的问题。但是我遇到了与您描述的相同的问题。pg_upgradecluster无法停止旧集群的原因是因为Tomcat实例正在使用连接,而Postgres无法关闭它们。希望这对某人有帮助。
bplayer

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.