八月 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工具。