八月 16, 2023
摘要:在本教程中,您将学习如何使用pg_dump
和pg_dumpall
工具备份 PostgreSQL 数据库。
目录
介绍
备份数据库是数据库管理中最关键的任务之一。在备份数据库之前,您应该考虑以下类型的备份:
- 完整/部分的数据库
- 数据和结构,或仅结构
- 时间点恢复
- 恢复性能
PostgreSQL 附带的pg_dump
和pg_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
。
-W
:pg_dump
在连接 PostgreSQL 数据库服务器之前强制提示输入密码。按回车键后,pg_dump
将提示输入postgres
用户的密码。
-F
:指定输出文件格式,可以是以下之一:
c
:自定义格式的存档文件格式d
:目录格式的存档t
:tarp
:纯文本 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
工具。