1.4. 如果你是在升级

新版本的PostgreSQL的内部数据存储格式可能会 发生改变.因此, 如果你正在升级一个版本号不象"7.3.x"这样的系统, 你就必须按照这里说的方法备份和恢复你的数据. 这些指导假设你现有的安装在 /usr/local/pgsql 目录里面, 并且数据区在 /usr/local/pgsql/data. 根据你的情况修改这些路径.

  1. 确保你在备过程中和备份后没有更新. 虽然即使有数据更新也不会影响备份的完整性,但是很明显 更新的数据会被排除在备份之外,而它是应该包括进来的.如果有必要, 可以编辑文件/usr/local/pgsql/data/pg_hba.conf 或等效的文件中的权限以禁止除你之外的所有人的访问.

  2. 要备份出你的数据库安装,敲入:

    pg_dumpall > outputfile

    如果你需要保留 OID(比如说当你用到它们做外键时),那么在 运行pg_dumpall时带-o选项.

    pg_dumpall 并不保存大对象. 如果你要保存大对象,请检查 Section 9.1.4

    要做一个备份,你可以使用你当前正在运行的版本的 pg_dumpall 命令。不过,要获取最好的结果,最好使用来自 PostgreSQL 7.3 的 pg_dumpall,因为这个版本包含对老版本的错误修补以及改进。 虽然这个建议看起来好像很愚蠢,因为你还没有安装新版本,但如果你准备安装新版本, 我们还是建议你遵循这个建议。这个时候你可以按照平常那样完成安装, 然后再转换数据。这样将降低停业时间。

  3. 如果你准备把新版本的数据库装在与旧数据库相同的位置,那么 关闭旧的数据库服务器,(至少在安装新文件之前如此):

    kill -INT `cat /usr/local/pgsql/data/postmaster.pid`

    在 7.0 以前的版本没有这个 postmaster.pid 文件.如果你用的是这样的版本 那你就得自己把数据库服务器的进程号找出来,比如通过这样的 命令 ps ax | grep postmaster,然后 把进程号交给 kill命令.

    在那些在引导的时候就启动 PostgreSQL 的系统上,可能已经有一个启动文件可以干这件事. 例如,在一台Red Hat Linux 系统上我们可以找到

    /etc/rc.d/init.d/postgresql stop

    是可以用的.另外一个可能是 pg_ctl stop

  4. 如果你准备装在老版本的地盘,那么把它们挪走也是一条好计策, 以便你碰到麻烦后还能退回去.用这样的命令:

    mv /usr/local/pgsql /usr/local/pgsql.old

当你装完 PostgreSQL 7.3,创建一个新的数据库目录 然后启动新服务器.要记住你必须用特殊的数据库用户登录后才能执行 这些命令(如果你是升级的话这个帐户应该已经存在了).

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data

最后,使用新的 psql, 用下面命令恢复你的数据:

/usr/local/pgsql/bin/psql -d template1 -f outputfile

下面这些文章比较详细地讨论了这个问题: Section 9.3,, 不管你是否一定需要这样做,我们都建议你好好读一下.