PostgreSQL 15可靠性之统一非排他性备份模式

来源:这里教程网 时间:2026-03-14 21:21:21 作者:

PostgreSQL 15版本在可靠性方面有不少改进,上一篇文章介绍了本地化规则的改进: <<PostgreSQL 15可靠性之本地化规则改进>>,本文将介绍另外一个关于备份模式的改进。

在介绍备份模式之前我们先了解一下备份函数名称在PostgreSQL 15的变化,大家如果有使用自定义脚本调用过备份函数做备份时,在PostgreSQL 15之前是下面的两个函数:

  • pg_start_backup()
  • pg_stop_backup()

    从PostgreSQL 15开始名称变为:

  • pg_backup_start()
  • pg_backup_stop()

    这样命名之后,方便进行TAB补全,也容易搜索和识记,不过重命名主要是为了区分以前的独占模式。

    在PostgreSQL 15里我们如果仔细观察pg_backup_start()和pg_backup_stop()函数的参数列表,可以对比发现排他性备份模式"exclusive"参数消失了。

    image.png

    排他性备份模式一直以来并不被推荐使用,它带来最大的问题是如果数据库服务器在这种模式突然停止时,服务器可能无法随后启动。

    因为排他性备份下,系统会在数据目录创建一个backup_label备份标签文件,其中包含启动备份的最新检查点位置。这能确保在启动服务时不会从控制文件pg_control中读取检查点位置。

    但是它可能会导致数据损坏,因为备份可能包含该检查点之前的数据文件。系统业务如果比较繁忙,pg_wal目录中的WAL可能已经被归档和回收。随后服务启动将失败,此时必须手动删除备份中的标签文件才能重新启动数据库服务。

    从PostgreSQL 15开始,删除了排他性备份模式,非排他性备份模式下通过pg_backup_stop函数返回检查点及表空间映射等信息,而不在数据目录中创建。

    postgres=# select pg_backup_stop();
                                   pg_backup_stop                                
    ------------------------------------------------------------------------
     (0/83000138,"START WAL LOCATION: 0/83000060 (file 000000010000000000000083)+
     CHECKPOINT LOCATION: 0/83000098                                            +
     BACKUP METHOD: streamed                                                    +
     BACKUP FROM: primary                                                       +
     START TIME: 2022-11-21 08:42:34 CST                                        +
     LABEL: mybak1                                                              +
     START TIMELINE: 1                                                          +
     ","")
    (1 row)

    但是在备份期间需要保持数据库连接的连续性,如果客户端在进行备份时连接断开则备份将中止。

    同时与独占模式相关的pg_is_in_backup()和pg_backup_start_time()这两个函数已经没有用武之地,也被删除了。

    保持联系

    本人组建了一个技术交流群:PG乐知乐享交流群。欢迎关注文章的小伙伴随缘加入,进群请加本人微信skypkmoon并备注PG乐知乐享。

  • 相关推荐