相同数据 space 内的 postgres 重大升级(9.5.x 到 9.6.x)

postgres major upgrade (9.5.x to 9.6.x) within same data space

我试图将我的 postgres 安装从 9.5.7 升级到 9.6.5
我的 postgres 数据库生产实例有几个数据库,到目前为止消耗了 ~700 GB space。
pg_upgrade 新旧数据目录需要 2 个不同的目录。

pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir

它需要一个新目录来执行 pg_upgrade,因为我能够 运行 在我的 local 中执行上述命令/stage 数据库,因为我的数据库与 prod 相比较小,我在本地

中观察到以下内容
    sudo du -sh /var/lib/pgsql/data-9.5
            64G /var/lib/pgsql/data-9.5
    sudo du -sh /var/lib/pgsql/data-9.6
            60G /var/lib/pgsql/data-9.6

并且我有足够的免费数据 space 在我的 local/stage 中执行临时 pg_upgrade 过程,我在那里成功完成了。

在生产中我只有 ~300 GB 免费 space.

但是升级成功后我们会删除/var/lib/pgsql/data-9.5目录。

有没有什么方法可以进行就地数据升级,这样临时 pg_upgrade 过程就不需要相同数量的额外 space 了?

Run pg_upgrade

/usr/lib/postgresql/9.6/bin/pg_upgrade
           -b /usr/lib/postgresql/9.5/bin/
           -B /usr/lib/postgresql/9.6/bin/
           -d /var/lib/pgsql/data-9.5/
           -D /var/lib/pgsql/data/
        --link --check

Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* system OID user data types ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for roles starting with 'pg_' ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Clusters are compatible

始终运行 pg_upgrade 新服务器的二进制文件,而不是旧服务器的二进制文件。 pg_upgrade 需要指定新旧集群的数据和可执行 (bin) 目录。您还可以指定用户和端口值,以及是否希望数据 linked 而不是复制(默认)。

如果你使用link模式,升级会更快(没有文件复制)并且使用更少的磁盘space,但升级后启动新集群后将无法访问旧集群。 Link 模式还要求新旧集群数据目录在同一个文件系统中。 (Tablespaces 和 pg_xlog 可以在不同的文件系统上。)请参阅 pg_upgrade --help 以获得完整的选项列表。

感谢全面的 postgres 社区 documentation 最终帮助我找到了解决方案。