启动PostgreSQL基础备份时指定数据库名的原因及template0替代可行性
PostgreSQL 8基础备份中指定数据库名的意义及template0的有效性
好问题!这确实是个容易让人混淆的点,尤其是刚接触PostgreSQL集群级备份的时候。咱们一步步拆解:
1. 指定数据库名的核心意义:只是连接入口,而非备份范围
在PostgreSQL 8中,启动基础备份的关键命令是SELECT pg_start_backup('备份标签');——但这个命令必须在一个已连接的数据库会话中执行。PostgreSQL的客户端工具(比如psql)无法直接连接到整个集群,必须指定一个具体的数据库来建立连接会话,这就是你看到指定DATABASENAME的原因。
划重点:你指定的mydb或者其他数据库,并不是用来限定备份哪个数据库,基础备份始终是复制整个数据目录(包含集群内所有数据库)。这个数据库名只是给你提供一个执行pg_start_backup()的“操作窗口”而已。
2. 使用template0完全有效,甚至是推荐选项
当然可以用template0作为连接的数据库,而且非常合适:
template0是PostgreSQL自带的系统模板数据库,它始终存在于集群中,不会被业务操作删除或修改;- 默认情况下
template0是只读状态,用它来连接执行备份命令,不用担心误操作影响业务数据; - 和其他数据库一样,只要你以超级用户身份连接到
template0,就能正常执行pg_start_backup(),效果和连接到其他数据库完全一致——都是让整个集群进入备份一致状态。
额外提醒
不管你连接到哪个数据库,执行pg_start_backup()都需要超级用户权限,这是PostgreSQL 8的权限要求,这点要注意。
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

