2010-09-01 37 views
1

我将Ubuntu 8.04升级到Ubuntu 10.04。不幸的是,升级过程还将Postgres 8.3安装更新为Postgres 8.4安装。我的感觉是,虽然数据库引擎二进制文件已经更新,但数据库本身并没有被迁移,因此它不能被8.4加载。 由于8.3数据格式与8.4格式不兼容,因此改变postgresql.conf是不够的,我也不能在我的8.4安装中使用pg_dump将Postgresql 8.3数据库文件升级到8.4

我需要一种方法将我以前的基础从8.3升级到8.4,没有访问8.3引擎,只有8.4。

任何线索?

回答

0

您必须在源代码临时位置安装PostgreSQL 8.3,在那里复制您的旧数据,启动Pg,使用pd_dumpall转储它的数据,然后将这些数据导入到新的Postgres中。

没有安装Pg 8.3就不可能。

+0

这工作就像一个魅力!我从源代码编译它,使用--enable-integer-datetimes和--without-readline。 只有当我能够pg_dumpall。 谢谢! – SCO 2010-09-02 11:44:57

0

确保您在尝试任何操作之前备份所有内容。

pg_migrator项目,我认为会为你做,但我不确定它是否需要8.3应用程序或源代码。

+0

是的我认为需要一些东西(来源我们的二进制文件),不记得哪一个。另外,它的设置看起来比8.3的编译/启动更复杂。 无论如何,感谢您的帮助! – SCO 2010-09-02 11:48:16

7

Debian中的postgres软件包,也就是Ubuntu有一个非常明确定义的从一个Postgres版本升级到另一个版本的方式。该过程在/usr/share/doc/postgresql-common/README.Debian记录如下:

Default clusters and upgrading 
------------------------------ 
When installing a postgresql-X.Y package from scratch, a default 
cluster 'main' will automatically be created. This operation is 
equivalent to doing 'pg_createcluster X.Y main --start'. 

Due to this default cluster, an immediate attempt to upgrade an 
earlier 'main' cluster to a new version will fail and you need to 
remove the newer default cluster first. E. g., if you have 
postgresql-8.2 installed and want to upgrade to 8.3, you first install 
postgresql-8.3: 

    apt-get install postgresql-8.3 

Then drop the default 8.3 cluster: 

    pg_dropcluster 8.3 main --stop 

And then upgrade the 8.2 cluster to 8.3: 

    pg_upgradecluster 8.2 main 

做到这一点的最佳时间是前ugrading一个版本的Ubuntu在所述版本你正在运行的Postgresql已经被删除,即在这个例子中,而在一个可以安装Postgres 8.3和Postgres 8.4的Ubuntu版本上。就我而言,我从轻率走向业力,将8.3升级到8.4,然后从业力转向清醒。

上述升级过程非常流畅。 * pg_upgradecluster *命令将停止旧版本,迁移数据,然后在与旧版本相同的端口上启动新版本,最后在新端口上启动旧版本。

如果您在迁移到缺少postgres 8.3的Ubuntu版本之前没有迁移8.3 postgres数据,迁移仍然很简单。通过增加业报Ubuntu的存储库的/etc/apt/sources.list开始:

deb http://archive.ubuntu.com/ubuntu/ karmic main restricted universe 

安装PostgreSQL 8.3:

apt-get update && apt-get install postgresql-8.3 

放下你的8.4集群。 警告:这将删除postgresql 8.4安装中的数据(如果有的话)。但如果你只是这样做,因为你需要将你的8.3升级到8.4,那么你的8.4集群中将没有数据。

pg_dropcluster 8.4 main --stop 

然后是8.3群集升级到8.4:

pg_upgradecluster 8.3 main 

最后,除去的PostgreSQL-8。3软件包,并从/etc/apt/sources.list中删除jaunty-line,然后再运行apt-get update

像往常一样,在执行上述任何操作之前先备份postgres目录总是一个好主意。