此条目涉及一个 PostgreSQL 功能,该功能已弃用,并可能在未来的版本中不再支持。
pg_start_backup() 是一个系统函数,它将PostgreSQL置于适合在文件系统级别执行备份的状态。
pg_start_backup() 添加于 PostgreSQL 8.0,并在 PostgreSQL 15 中被 pg_backup_start() 取代。
用法
pg_start_backup (labeltext[,fastboolean[,exclusiveboolean]] ) →pg_lsn
pg_start_backup() 返回最小WAL位置的 LSN,该位置对于PostgreSQL从此时点创建的备份进行恢复是必需的。
注意:用户或客户端应用程序负责确保所需的 WAL 文件可用于备份;一般来说,建议使用 pg_basebackup 等应用程序来管理备份过程。
源代码
处理 pg_start_backup() 的后端代码位于 src/backend/access/transam/xlog.c 中的 do_pg_start_backup() 函数。
变更历史
- PostgreSQL 15
- 被
pg_backup_start()取代 (commit 58c41712)
- 被
- PostgreSQL 9.6
- 添加了对非独占式备份的支持 (commit 71176854)
- PostgreSQL 9.4
- PostgreSQL 8.4
- PostgreSQL 8.0
- 添加于 (commit 58c41712)
示例
独占式备份
postgres=# SELECT pg_start_backup('test backup');
pg_start_backup
-----------------
0/2000028
(1 row)
postgres=# SELECT pg_is_in_backup();
pg_is_in_backup
-----------------
t
(1 row)
postgres=# SELECT pg_backup_start_time();
pg_backup_start_time
------------------------
2018-12-14 19:22:50+09
(1 row)
此时,数据目录将包含一个 backup_label 文件,并且此时可以安全地在文件系统级别备份数据目录。
非独占式备份
postgres=# SELECT pg_start_backup(label := 'test backup', exclusive := false); pg_start_backup ----------------- 0/8000028 (1 row)
在非独占式备份中,将不创建 backup_label 文件(取而代之的是,备份标签的内容将作为记录由 pg_stop_backup() 返回)。此时可以安全地在文件系统级别备份数据目录。
参考资料
- PostgreSQL 14 文档: 备份控制函数
有用链接
- pg_start_backup() 做什么? - 2ndQuadrant 2017 年 1 月博客文章
