此条目涉及一个 PostgreSQL 功能,该功能已弃用,并可能在未来的版本中不再支持。
pg_start_backup()
是一个系统函数,它将PostgreSQL置于适合在文件系统级别执行备份的状态。
pg_start_backup()
添加于 PostgreSQL 8.0,并在 PostgreSQL 15 中被 pg_backup_start()
取代。
用法
pg_start_backup (label
text
[,fast
boolean
[,exclusive
boolean
]] ) →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 月博客文章