技术提示:如何备份和还原 Postgres 数据库?
卡兰·辛格
2013年6月19日
电子邮件
1 min read

关键要点
PostgreSQL 备份可以根据您的需要,针对单个表、单个数据库或所有数据库进行。
pg_dump创建一个包含 DDL 和重建目标表或数据库所需数据的SQL 文本文件。pg_dumpall备份 Postgres 实例上的每一个数据库。通过执行 SQL dump 到目标数据库来恢复,这由
psql完成。表级恢复需要确保表不存在以避免冲突。
备份单个表时,要注意关系依赖。
可以从本地进行转储,并恢复到远程 Postgres 实例。
根据导出的内容,备份包括
CREATE、ALTER和COPY命令。适当的备份策略依赖于对表关系、模式使用和部署环境的理解。
始终确保数据完整性,在必要时通过备份包含引用表来实现。
Q&A 精华
pg_dump 实际上做了什么?
pg_dump生成一个基于文本的 SQL 文件,其中包含重新创建表或数据库所需的完整命令集,完全如备份时存在的一样。我可以只备份一个表而不是整个数据库吗?
是的。使用
pg_dump --table TABLENAME导出特定表。如果跨模式存在同名表,请使用--schema指定正确的一个。我是否需要担心在备份单个表时有关联表的问题?
绝对可以。PostgreSQL 是关系型的,因此其他表可能会引用您正在备份的那张。如果您只恢复一张表而不恢复相关的表,您可能会破坏引用完整性。
我如何备份完整数据库?
运行类似以下命令:
pg_dump -U <user> <database> -f <output.sql>这将导出该数据库的所有表、模式定义、索引和数据。
pg_dumpall 做什么?
pg_dumpall备份服务器上的每个数据库到一个单一的 SQL 文件。当迁移或拍摄整个 Postgres 实例快照时,它非常有用。我可以将表恢复到现有数据库中吗?
是的。使用
psql -U <user> -f <file.sql> <database>。但请确保表 尚未存在—否则在恢复期间会出现“已存在”错误。
在进行完整数据库恢复期间会发生什么?
恢复文件运行:
CREATE TABLEALTER TABLECOPY(用于表数据)
将数据库带回到转储时的确切状态。
我可以将备份恢复到不同的服务器上吗?
是的,转储是可移植的。您可以在本地进行备份,并在版本兼容的情况下将其恢复到远程 Postgres 实例。
pg_dump 会影响运行中的数据库吗?
不。它通过SQL查询运行,并且不锁定整个数据库。它安全地捕获了一致的快照。
如何从pg_dumpall文件恢复所有数据库?
使用:
psql -U <user> -f all_dump.sql这会重新创建在转储中找到的所有数据库。



