PostgreSQL 教程: 使用 pg_dump 和 pg_dumpall 备份数据库

八月 16, 2023

摘要:在本教程中,您将学习如何使用pg_dumppg_dumpall工具备份 PostgreSQL 数据库。

目录

介绍

备份数据库是数据库管理中最关键的任务之一。在备份数据库之前,您应该考虑以下类型的备份:

  • 完整/部分的数据库
  • 数据和结构,或仅结构
  • 时间点恢复
  • 恢复性能

PostgreSQL 附带的pg_dumppg_dumpall工具可帮助您轻松有效地备份数据库。

对于那些想要快速查看备份数据库的命令的人来说,它是这样的:

pg_dump -U username -W -F t database_name > c:\backup_file.tar

在下一节中,您将逐步了解如何备份一个数据库、所有数据库以及仅部分数据库对象。

如何备份一个数据库

要备份一个数据库,您可以使用pg_dump工具。pg_dump可以将所有数据库对象的内容转储到单个文件中。

首先,导航到 PostgreSQL 的 bin 目录:

C:\>cd C:\Program Files\PostgreSQL\12\bin

其次,执行pg_dump程序并使用以下选项将dvdrental数据库备份到c:\pgbackup\文件夹中的dvdrental.tar文件中。

pg_dump -U postgres -W -F t dvdrental > c:\pgbackup\dvdrental.tar

让我们更详细地研究一下这些选项。

-U postgres:指定连接 PostgreSQL 数据库服务器的用户。我们在这个例子中使用了postgres

-Wpg_dump在连接 PostgreSQL 数据库服务器之前强制提示输入密码。按回车键后,pg_dump将提示输入postgres用户的密码。

-F:指定输出文件格式,可以是以下之一:

  • c:自定义格式的存档文件格式
  • d:目录格式的存档
  • t:tar
  • p:纯文本 SQL 脚本文件。

在此示例中,我们使用-F t指定将文件输出为 tar 文件。

dvdrental: 是您要备份的数据库的名称。

> c:\pgbackup\dvdrental.tar是输出备份文件的路径。

如何备份所有数据库

要备份所有数据库,您可以按顺序对每个数据库运行上面的pg_dump命令,如果您想加快备份过程,也可以并行运行。

  • 首先,在 psql 中,使用命令\list列出实例中所有可用的数据库。
  • 其次,使用上一节中所述的pg_dump程序备份每个单独的数据库 。

除了pg_dump程序之外,PostgreSQL 还为您提供了pg_dumpall工具,它允许您一次备份所有数据库。但不建议使用该工具,原因如下:

  • pg_dumpall程序将所有数据库依次导出到单个脚本文件中,这会阻止您执行并行恢复。如果您以这种方式备份所有数据库,恢复过程将花费更多时间。
  • 转储所有数据库的处理时间比单个数据库的处理时间长,因此您不知道哪个数据库的转储与特定时间点相关。

如果您有充分的理由使用pg_dumpall来备份所有数据库,可以使用下面的命令:

pg_dumpall -U postgres > c:\pgbackup\all.sql

pg_dumpall程序的选项与pg_dump程序的选项类似。此命令省略了-W选项,避免键入每个单独数据库的密码。

如何备份数据库对象定义

有时,您只想备份数据库对象定义,而不备份数据,这在测试阶段很有帮助,因为您不希望将测试数据移动到生产系统。

要备份所有数据库中的对象,包括角色、表空间、数据库、模式、表、索引、触发器、函数、约束、视图、所有权和权限,请使用以下命令:

pg_dumpall --schema-only > c:\pgdump\definitiononly.sql

如果您只想备份角色定义,请使用以下命令:

pg_dumpall --roles-only > c:\pgdump\allroles.sql

如果要备份表空间定义,请使用以下命令:

pg_dumpall --tablespaces-only > c:\pgdump\allroles.sql

进一步阅读

  • pg_dump – 如何使用该pg_dump工具。