技术提示:如何备份和还原 Postgres 数据库?

卡兰·辛格

2013年6月19日

电子邮件

1 min read

技术提示:如何备份和还原 Postgres 数据库?

关键要点

    • PostgreSQL 备份可以根据您的需要,针对单个表、单个数据库或所有数据库进行。

    • pg_dump 创建一个包含 DDL 和重建目标表或数据库所需数据的SQL 文本文件

    • pg_dumpall 备份 Postgres 实例上的每一个数据库

    • 通过执行 SQL dump 到目标数据库来恢复,这由psql 完成。

    • 表级恢复需要确保表不存在以避免冲突。

    • 备份单个表时,要注意关系依赖

    • 可以从本地进行转储,并恢复到远程 Postgres 实例。

    • 根据导出的内容,备份包括CREATEALTERCOPY 命令。

    • 适当的备份策略依赖于对表关系、模式使用和部署环境的理解。

    • 始终确保数据完整性,在必要时通过备份包含引用表来实现。

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 TABLE

    • ALTER TABLE

    • COPY(用于表数据)
      将数据库带回到转储时的确切状态。

  • 我可以将备份恢复到不同的服务器上吗?

    是的,转储是可移植的。您可以在本地进行备份,并在版本兼容的情况下将其恢复到远程 Postgres 实例。

  • pg_dump 会影响运行中的数据库吗?

    不。它通过SQL查询运行,并且不锁定整个数据库。它安全地捕获了一致的快照。

  • 如何从pg_dumpall文件恢复所有数据库?

    使用:

    psql -U <user> -f all_dump.sql

    这会重新创建在转储中找到的所有数据库。

首先,免责声明。本文提供了关于如何备份Postgres数据库表的一般指南。提供的示例不针对任何特定的表或数据库。如果您尝试备份特定的表,还应备份引用原始表的表。由于Postgres是一个关系型数据库,多个表之间总是存在引用。

这是一份“如何操作”的文档,仅提供示例命令,实际操作完全依赖于执行者及其具体用例。始终维护您尝试备份的数据的完整性。备份整个数据库始终是一个安全的选择,但在备份特定表时需要谨慎。

首先,免责声明。本文提供了关于如何备份Postgres数据库表的一般指南。提供的示例不针对任何特定的表或数据库。如果您尝试备份特定的表,还应备份引用原始表的表。由于Postgres是一个关系型数据库,多个表之间总是存在引用。

这是一份“如何操作”的文档,仅提供示例命令,实际操作完全依赖于执行者及其具体用例。始终维护您尝试备份的数据的完整性。备份整个数据库始终是一个安全的选择,但在备份特定表时需要谨慎。

首先,免责声明。本文提供了关于如何备份Postgres数据库表的一般指南。提供的示例不针对任何特定的表或数据库。如果您尝试备份特定的表,还应备份引用原始表的表。由于Postgres是一个关系型数据库,多个表之间总是存在引用。

这是一份“如何操作”的文档,仅提供示例命令,实际操作完全依赖于执行者及其具体用例。始终维护您尝试备份的数据的完整性。备份整个数据库始终是一个安全的选择,但在备份特定表时需要谨慎。

SQL-dump/pg_dump:

SQL-dump 方法的理念是生成一个包含 SQL 命令的文本文件,当将其反馈到服务器时,将在与转储时相同的状态下重新创建数据库。PostgreSQL 提供了适用于此目的的工具程序 pg_dump

pg_dump 是一个有效且全面的工具,用于备份 Postgres 数据库,并使用这些备份来恢复 Postgres 数据库。然而,它不仅限于数据库。我们可以使用 pg_dump 来备份表,然后使用这些备份来恢复单个表。使用 pg_dump,您可以备份本地数据库并将其恢复到远程数据库。

SQL-dump 方法的理念是生成一个包含 SQL 命令的文本文件,当将其反馈到服务器时,将在与转储时相同的状态下重新创建数据库。PostgreSQL 提供了适用于此目的的工具程序 pg_dump

pg_dump 是一个有效且全面的工具,用于备份 Postgres 数据库,并使用这些备份来恢复 Postgres 数据库。然而,它不仅限于数据库。我们可以使用 pg_dump 来备份表,然后使用这些备份来恢复单个表。使用 pg_dump,您可以备份本地数据库并将其恢复到远程数据库。

SQL-dump 方法的理念是生成一个包含 SQL 命令的文本文件,当将其反馈到服务器时,将在与转储时相同的状态下重新创建数据库。PostgreSQL 提供了适用于此目的的工具程序 pg_dump

pg_dump 是一个有效且全面的工具,用于备份 Postgres 数据库,并使用这些备份来恢复 Postgres 数据库。然而,它不仅限于数据库。我们可以使用 pg_dump 来备份表,然后使用这些备份来恢复单个表。使用 pg_dump,您可以备份本地数据库并将其恢复到远程数据库。

如何备份Postgres数据库:

备份一个 Postgres 表:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

上述命令是如何从 Postgres 数据库备份特定表的示例。使用上述命令,我们将 schema 'maincontrol' 中的表 'orgs' 从数据库 'pe' 备份到 ms_table.sql 文件。要备份特定表,请在 pg_dump 命令中使用 –table TABLENAME 选项。如果在不同的 schema 中有相同的表名称,则使用 –schema SCHEMANAME 选项。

  1. 备份特定的 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    这是备份特定 Postgres 数据库的示例。使用上述命令,我们将 Message Central 'pe' 数据库备份到文件 pe_dump.sql。备份文件包含 ‘pe’ 数据库中所有表的 create table、alter table 和 copy 命令。

  2. 备份所有 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    您可以使用 pg_dumpall 命令备份所有数据库。上述命令将创建在特定服务器上运行的 Postgres 实例中驻留的所有数据库的转储。要列出已备份的所有数据库,请使用命令 grep “^[\]connect” all.sql。

备份一个 Postgres 表:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

上述命令是如何从 Postgres 数据库备份特定表的示例。使用上述命令,我们将 schema 'maincontrol' 中的表 'orgs' 从数据库 'pe' 备份到 ms_table.sql 文件。要备份特定表,请在 pg_dump 命令中使用 –table TABLENAME 选项。如果在不同的 schema 中有相同的表名称,则使用 –schema SCHEMANAME 选项。

  1. 备份特定的 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    这是备份特定 Postgres 数据库的示例。使用上述命令,我们将 Message Central 'pe' 数据库备份到文件 pe_dump.sql。备份文件包含 ‘pe’ 数据库中所有表的 create table、alter table 和 copy 命令。

  2. 备份所有 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    您可以使用 pg_dumpall 命令备份所有数据库。上述命令将创建在特定服务器上运行的 Postgres 实例中驻留的所有数据库的转储。要列出已备份的所有数据库,请使用命令 grep “^[\]connect” all.sql。

备份一个 Postgres 表:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

上述命令是如何从 Postgres 数据库备份特定表的示例。使用上述命令,我们将 schema 'maincontrol' 中的表 'orgs' 从数据库 'pe' 备份到 ms_table.sql 文件。要备份特定表,请在 pg_dump 命令中使用 –table TABLENAME 选项。如果在不同的 schema 中有相同的表名称,则使用 –schema SCHEMANAME 选项。

  1. 备份特定的 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    这是备份特定 Postgres 数据库的示例。使用上述命令,我们将 Message Central 'pe' 数据库备份到文件 pe_dump.sql。备份文件包含 ‘pe’ 数据库中所有表的 create table、alter table 和 copy 命令。

  2. 备份所有 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    您可以使用 pg_dumpall 命令备份所有数据库。上述命令将创建在特定服务器上运行的 Postgres 实例中驻留的所有数据库的转储。要列出已备份的所有数据库,请使用命令 grep “^[\]connect” all.sql。

如何恢复 Postgres 数据库

  1. 恢复 Postgres 表:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    上述命令将把备份在 ms_table.sql 文件中的表安装到‘pe’数据库中。确保该表不存在,否则您将看到一堆‘已经存在’的错误。该命令创建表并将所有数据导出到新创建的表中。

  2. 恢复 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    与恢复表类似,我们可以使用上述命令来恢复完整的数据库。这里我们使用文件 pe_dump.sql 恢复‘pe’数据库,该文件是在上面的备份部分创建的。

  3. 恢复所有数据库:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    使用上述命令恢复所有数据库。‘all_dump.sql’ 是使用 pg_dumpall 创建的文件。上述命令将使我们获得所有 Postgres 数据库的状态,就像从原始数据库服务器进行转储时一样。

  1. 恢复 Postgres 表:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    上述命令将把备份在 ms_table.sql 文件中的表安装到‘pe’数据库中。确保该表不存在,否则您将看到一堆‘已经存在’的错误。该命令创建表并将所有数据导出到新创建的表中。

  2. 恢复 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    与恢复表类似,我们可以使用上述命令来恢复完整的数据库。这里我们使用文件 pe_dump.sql 恢复‘pe’数据库,该文件是在上面的备份部分创建的。

  3. 恢复所有数据库:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    使用上述命令恢复所有数据库。‘all_dump.sql’ 是使用 pg_dumpall 创建的文件。上述命令将使我们获得所有 Postgres 数据库的状态,就像从原始数据库服务器进行转储时一样。

  1. 恢复 Postgres 表:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    上述命令将把备份在 ms_table.sql 文件中的表安装到‘pe’数据库中。确保该表不存在,否则您将看到一堆‘已经存在’的错误。该命令创建表并将所有数据导出到新创建的表中。

  2. 恢复 Postgres 数据库:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    与恢复表类似,我们可以使用上述命令来恢复完整的数据库。这里我们使用文件 pe_dump.sql 恢复‘pe’数据库,该文件是在上面的备份部分创建的。

  3. 恢复所有数据库:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    使用上述命令恢复所有数据库。‘all_dump.sql’ 是使用 pg_dumpall 创建的文件。上述命令将使我们获得所有 Postgres 数据库的状态,就像从原始数据库服务器进行转储时一样。

其他新闻

阅读更多来自此类别的内容

A person is standing at a desk while typing on a laptop.

完整的AI原生平台,可与您的业务一起扩展。

© 2025 Bird

A person is standing at a desk while typing on a laptop.

完整的AI原生平台,可与您的业务一起扩展。

© 2025 Bird