3

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

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

它需要一个新目录来执行 pg_upgrade,因为我能够在本地/阶段数据库中运行上述命令,因为与 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

并且我有足够的可用数据空间来在我的本地/阶段执行临时 pg_upgrade 过程,并且我在那里成功地完成了。

在生产过程中,我只有约 300 GB的可用空间。

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

有没有办法进行就地数据升级,以便临时 pg_upgrade 进程不需要相同数量的额外空间?

4

1 回答 1

3

运行 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)目录。您还可以指定用户和端口值,以及是否希望数据链接而不是复制(默认)。

如果使用链接模式,升级速度会快很多(不复制文件)并且使用更少的磁盘空间,但是一旦升级后启动新集群,您将无法访问旧集群。链接模式还要求新旧集群数据目录在同一个文件系统中。(表空间和 pg_xlog 可以在不同的文件系统上。)查看pg_upgrade --help完整的选项列表。

感谢 postgres 社区的综合文档,它帮助我找到了解决方案。

于 2017-11-03T21:15:40.543 回答