15.4. 升级

假设安装路径是/usr/local/pgsql库下,并且data路径是/usr/local/pgsql/data。 可以根据自己的安装路径进行相应替换。

每个PostgreSQL主要版本的内部数据存储格式通常会发生改变。 因此,如果你正在升级一个版本号不像"9.0.x"这样的系统, 你就必须按照这里说的方法备份和恢复你的数据。 如果您正在从PostgreSQL "9.0.x"升级,那么新版本可以使用当前 数据文件,应该跳过备份和恢复下面的步骤(因为不必要)。

  1. 如果正在备份,确保你的数据库没有更新。 虽然即使有数据更新也不会影响备份的完整性,但是很明显更新的数据会被排除在备份之外 如果有必要, 可以编辑/usr/local/pgsql/data/pg_hba.conf(或等效的)文件中的权限以禁止除你之外的所有人访问。

    备份出数据库的安装,输入:

    pg_dumpall > outputfile

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

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

  2. 关闭旧的数据库服务器:

    pg_ctl stop

    在那些在开机时就启动PostgreSQL的系统上, 可能已经有一个启动文件可以完成这件事。 例如,在一台Red Hat Linux系统上我们可以使用:

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

  3. 如果从备份,重命名或删除旧的安装 目录中恢复。重命名目录而不是删除它是一条好主意,以便你碰到麻烦后还能退回去。 记住目录可能会占用大量的磁盘空间。用这样的命令来重命名目录:

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

  4. 安装PostgreSQL的新版本,参阅 Section 15.5.。

  5. 如果需要,创建一个新的数据库集。要记住你必须用特殊的数据库用户登录后才能执行这些命令(如果你是升级的话这个帐户应该已经存在了)。

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

  6. 恢复先前的pg_hba.conf和任何postgresql.conf修改。

  7. 启动数据库服务器,再使用特定的数据库用户帐户:

    /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

  8. 最后,从备份恢复您的数据:

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

    使用new psql

更多内容在 Section 24.4,里, 包括当新安装被安装时如何继续运行以前的安装的说明。