pg_upgrade

描述

pg_upgrade — 允许从前面的版本升级而不需要重载数据

语法

pg_upgrade [ -f filename ] old_data_dir

描述

pg_upgrade 是一个从以前的 PostgreSQL 版本升级而不重载数据的工具。不是所有 Postgres 版本的迁移都可以用这个方法实现。请检查你的节点的版本信息获取细节。
 
用 pg_upgrade 升级 Postgres
    备份你现有的数据目录,最好是用 pg_dumpall 做一次完整输出。

    然后:

    % pg_dumpall -s >db.out
    不带任何数据输出你的旧数据库的表定义。
     

    停止旧的 postmaster 和所有后端的运行。

    把你的旧的 pgsql data/ 目录改成(用 mv )data.old/

    运行

    % make install
    安装新的二进制文件。

    运行 initdb 为新版本创建新的包含系统表的 template1 数据库。

    运行新的 postmaster。(注意:在数据库升级完成前不能有用户与数据库联接。你可能需要不带 -i 参数启动 postmaster 和/或暂时修改 pg_hba.conf。)

    把你的工作目录改到 pgsql 主目录,然后键入:

    % pg_upgrade -f db.out data.old
    该程序会做一些检查以确保所有东西都正确配置好了,然后就会运行你的 db.out 脚本创建你原来有的数据库和表,但是没有数据。然后它将把那些不含系统表和索引的文件物理地从 data.old/ 移到合适的 data/ 子目录里,代替在运行 db.out 脚本时创建的空文件。

    如果需要的话恢复你的旧的 pg_hba.conf,以允许用户登录。

    停止然后重起 postmaster。

    仔细检查升级完了的表的内容。如果发现问题,你将需要通过从你的完全 pg_dump 的备份重新装载来恢复。如果你觉得满意,你可以删除 data.old/ 目录。

    升级完的数据库将是处于未清理的状态。你在开始生产工作前可能需要运行一个 VACUUM ANALYZE