Debian 以及 Ubuntu 中的 postgres 软件包有一种非常明确的方式来从一个 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
执行此操作的最佳时间是在升级到已删除您当前运行的 Postgresql 版本的 Ubuntu 版本之前,即在本例中,而在 Ubuntu 版本上可以同时安装 Postgres 8.3 和 Postgres 8.4。就我而言,我从轻松到业力,将 8.3 升级到 8.4,然后从业力到清醒。
如上所述的升级过程非常顺利。 *pg_upgradecluster* 命令将停止旧版本,迁移数据,然后在与旧版本相同的端口上启动新版本,最后在新端口上启动旧版本。
如果您在迁移到缺少 postgres 8.3 的 Ubuntu 版本之前没有迁移 8.3 postgres 数据,迁移仍然很简单。首先将 karmic 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 目录总是一个好主意。