技术提示:如何备份和还原 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 备份选项概述

备份范围

使用工具

输出文件

它包括的内容

使用时间

单个表

pg_dump

.sql

表 DDL + 数据

孤立表恢复或迁移

单个数据库

pg_dump

.sql

所有表、架构、数据

完整数据库备份

所有数据库

pg_dumpall

.sql

实例上的每个数据库

服务器范围的备份或迁移


备份一个 Postgres 表:

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

上述命令是如何从 Postgres 数据库备份特定表的示例。使用上面的命令,我们正在将架构 ‘maincontrol’ 中的表 ‘orgs’ 从数据库 ‘pe’ 备份到 ms_table.sql 文件。要备份特定表,请在 pg_dump 命令中使用 –table TABLENAME 选项。如果不同架构中有相同的表名,请使用 –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’ 数据库中所有表的创建表、修改表和复制命令。

  2. 备份所有 Postgres 数据库:

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

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

Postgres 备份选项概述

备份范围

使用工具

输出文件

它包括的内容

使用时间

单个表

pg_dump

.sql

表 DDL + 数据

孤立表恢复或迁移

单个数据库

pg_dump

.sql

所有表、架构、数据

完整数据库备份

所有数据库

pg_dumpall

.sql

实例上的每个数据库

服务器范围的备份或迁移


备份一个 Postgres 表:

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

上述命令是如何从 Postgres 数据库备份特定表的示例。使用上面的命令,我们正在将架构 ‘maincontrol’ 中的表 ‘orgs’ 从数据库 ‘pe’ 备份到 ms_table.sql 文件。要备份特定表,请在 pg_dump 命令中使用 –table TABLENAME 选项。如果不同架构中有相同的表名,请使用 –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’ 数据库中所有表的创建表、修改表和复制命令。

  2. 备份所有 Postgres 数据库:

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

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

Postgres 备份选项概述

备份范围

使用工具

输出文件

它包括的内容

使用时间

单个表

pg_dump

.sql

表 DDL + 数据

孤立表恢复或迁移

单个数据库

pg_dump

.sql

所有表、架构、数据

完整数据库备份

所有数据库

pg_dumpall

.sql

实例上的每个数据库

服务器范围的备份或迁移


备份一个 Postgres 表:

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

上述命令是如何从 Postgres 数据库备份特定表的示例。使用上面的命令,我们正在将架构 ‘maincontrol’ 中的表 ‘orgs’ 从数据库 ‘pe’ 备份到 ms_table.sql 文件。要备份特定表,请在 pg_dump 命令中使用 –table TABLENAME 选项。如果不同架构中有相同的表名,请使用 –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’ 数据库中所有表的创建表、修改表和复制命令。

  2. 备份所有 Postgres 数据库:

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

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

如何恢复 Postgres 数据库

Postgres 还原选项概述

还原范围

使用工具

输入文件

关键要求

常见问题

单个表

psql

表转储 .sql

表必须不存在

“已存在”错误

单个数据库

psql

数据库转储 .sql

目标DB必须存在

数据意外覆盖

所有数据库

psql

完整转储 .sql

建议超级用户访问

还原超出预期的数据


  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 数据库。

Postgres 还原选项概述

还原范围

使用工具

输入文件

关键要求

常见问题

单个表

psql

表转储 .sql

表必须不存在

“已存在”错误

单个数据库

psql

数据库转储 .sql

目标DB必须存在

数据意外覆盖

所有数据库

psql

完整转储 .sql

建议超级用户访问

还原超出预期的数据


  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 数据库。

Postgres 还原选项概述

还原范围

使用工具

输入文件

关键要求

常见问题

单个表

psql

表转储 .sql

表必须不存在

“已存在”错误

单个数据库

psql

数据库转储 .sql

目标DB必须存在

数据意外覆盖

所有数据库

psql

完整转储 .sql

建议超级用户访问

还原超出预期的数据


  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