database - 同一数据空间内的 postgres 主要升级(9.5.x 到 9.6.x)

标签 database postgresql maintenance-plan

我试图将我的 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,因为我能够在我的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

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

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

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

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

最佳答案

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

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

感谢 postgres 社区综合 documentation 毕竟这对我找到解决方案有很大帮助。

关于database - 同一数据空间内的 postgres 主要升级(9.5.x 到 9.6.x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47104420/

相关文章:

sql - 是否可以在 postgresql 中为每个主键创建索引?

php - 使用 PDO 插入 NULL 而不是空字符串

sql-server - 维护计划执行选项呈灰色

sql-server - 每小时自动恢复数据库的最佳方法

r - 如何根据列值选择行并在 R 中的大型数据框中以特定方式转换行

java - 内存数据库与线程安全数据结构的建议

Python 在遍历大型列表时速度很慢

sql - "IF"处或附近的 Postgres 语法错误

sql-server - 如何监控和查找 SQL 数据库中未使用的索引

java - 如何显示部署在 Tomcat 中的应用程序的维护页面?