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

关键要点
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这会重新创建在转储中找到的所有数据库。
首先,免责声明。本文提供了关于如何备份Postgres数据库表的一般指南。提供的示例不针对任何特定的表或数据库。如果您尝试备份特定的表,还应备份引用原始表的表。由于Postgres是一个关系型数据库,多个表之间总是存在引用。
这是一份“如何操作”的文档,仅提供示例命令,实际操作完全依赖于执行者及其具体用例。始终维护您尝试备份的数据的完整性。备份整个数据库始终是一个安全的选择,但在备份特定表时需要谨慎。
SQL-dump/pg_dump:
SQL-dump 方法的理念是生成一个包含 SQL 命令的文本文件,当将其反馈到服务器时,将在与转储时相同的状态下重新创建数据库。PostgreSQL 提供了适用于此目的的工具程序 pg_dump。
pg_dump 是一个有效且全面的工具,用于备份 Postgres 数据库,并使用这些备份来恢复 Postgres 数据库。然而,它不仅限于数据库。我们可以使用 pg_dump 来备份表,然后使用这些备份来恢复单个表。使用 pg_dump,您可以备份本地数据库并将其恢复到远程数据库。
如何备份Postgres数据库:
如何恢复 Postgres 数据库
Postgres 还原选项概述
还原范围 | 使用工具 | 输入文件 | 关键要求 | 常见问题 |
|---|---|---|---|---|
单个表 | psql | 表转储 | 表必须不存在 | “已存在”错误 |
单个数据库 | psql | 数据库转储 | 目标DB必须存在 | 数据意外覆盖 |
所有数据库 | psql | 完整转储 | 建议超级用户访问 | 还原超出预期的数据 |
还原一个Postgres表:
$ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe上面的命令将会把备份在 ms_table.sql 文件中的表安装到 'pe' 数据库。确保此表不存在,否则您会看到一堆‘已存在’的错误。此命令会创建表并将所有数据导出到新创建的表中。
还原一个Postgres数据库:
$ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql类似于还原表,我们可以使用上面的命令来还原完整的数据库。这里我们使用 pe_dump.sql 文件来还原 'pe' 数据库,该文件是在上面的备份部分中创建的。
还原所有数据库:
$ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql使用上述命令还原所有数据库。'all_dump.sql' 是使用
pg_dumpall创建的文件。上述命令将为我们提供所有在转储时从原始数据库服务器获取的相同状态的 Postgres 数据库。



