9.2. 文件系统级别的备份

另一个备份的策略是直接拷贝PostgreSQL用于存放数据库 数据的文件.我们在 Section 3.2 里解释了这些文件的位置,不过 如果你想用这个方法,你早就找到它们的位置. 你可以用自己喜欢的任何常用文件系统备份的方法,例如

tar -cf backup.tar /usr/local/pgsql/data

不过,你要受到两个限制,令这个方法不那么实用,或者至少 比 pg_dump 的方法逊色一些:

  1. 为了进行有效的备份,数据库服务器必须被关闭. 象拒绝所有联接这样的折衷的方法是不行的,因为总是有一些 缓冲区数据存在. 同样的原因,我们也不建议信任那些声称支持 "连续快照(consistent snapshots)"的操作系统.有关关闭服务器的信息可以在 Section 3.6里面找到.

    一样,你在恢复数据之前也要关闭服务器.

  2. 如果你曾经深入了解了文件系统布局的细节,你可能试图从对应的 文件或目录里备份几个表或者数据库. 这样做是没用的,因为包含在这些文件里的信息只是 部分信息.还有一半信息在提交日志文件 pg_clog/*里面,它包含所有事务的提交状态. 只有拥有这些信息,表文件的信息才是可用的.当然,试图 只恢复表和相关的 pg_clog 数据也是徒劳 的,因为这样会把数据库集群里的所有其他没有用的表的信息都拿出来.

还要说明的是,文件系统备份不会比SQL转储小.恰恰相反,大多数 情况下它要大.(比如pg_dump 不用 倒出索引,只是创建它们的命令.)