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目录总是一个好主意。
这工作就像一个魅力!我从源代码编译它,使用--enable-integer-datetimes和--without-readline。 只有当我能够pg_dumpall。 谢谢! – SCO 2010-09-02 11:44:57