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

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

它需要一个新的目录来进行pg_升级,因为我可以在本地/后台数据库中运行上述命令,因为与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_升级过程,我在那里成功地做到了。
在生产过程中,我只有大约300 GB的可用空间。
但是在成功升级之后,我们将删除/var/lib/pgsql/data-9.5目录。
是否有任何方法可以进行就地数据升级,以便在临时pg_升级过程中不需要相同数量的额外空间?

最佳答案

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二进制文件。pg_升级需要指定新旧集群的数据和可执行(bin)目录。还可以指定用户和端口值,以及是否希望链接数据而不是复制数据(默认值)。
如果使用链接模式,升级将更快(无文件复制)并使用更少的磁盘空间,但在升级后启动新群集后,将无法访问旧群集。链接模式还要求新旧群集数据目录位于同一文件系统中。(表空间和pg_xlog可以在不同的文件系统上)有关选项的完整列表,请参见pg_upgrade --help
感谢postgres社区的全面documentation帮助我找到了解决方案。

07-24 09:52
查看更多