PostgreSQL备份恢复命令操作教程
一款易于使用的图形化 PostgreSQL 数据库开发工具。从编写简单的 SQL 查询到开发复杂的数据库,Navicat for PostgreSQL 都能迎合大部份用户的需要,包括 PostgreSQL 初学者以及经验丰富的开发人员。它能连接任何本地或远程 PostgreSQL 服务器,并支持 Amazon
学习如何使用pg_dump和pg_restore进行PostgreSQL数据库备份与恢复。本文提供命令行示例,并演示如何在Navicat for PostgreSQL中确认连接、执行备份及验证恢复结果,适合初学者掌握基础运维操作。
PostgreSQL 的数据保护通常依赖于 pg_dump、pg_restore 和 psql 这一组核心命令行工具。对于习惯图形化界面的用户,Navicat for PostgreSQL 提供了直观的对象浏览和管理入口,但在执行底层备份恢复任务时,理解命令行逻辑依然至关重要。本文将引导你建立从连接确认到文件生成,再到恢复验证的完整操作地图。
概述
在开始任何备份或恢复操作前,首先需要明确目标数据库的位置和身份。这包括服务器地址、端口号、用户名以及具体的数据库名称。Navicat 左侧的连接树是确认这些信息最直观的地方,但实际的备份命令需要在操作系统终端中运行。

PostgreSQL整体界面与终端位置示意
确保终端环境中已安装与目标 PostgreSQL 版本兼容的客户端工具。如果输入 pg_dump 提示找不到命令,需检查安装路径是否已加入系统环境变量 PATH,或直接使用工具的绝对路径。出于安全考虑,切勿将密码直接明文写入可能被历史记录保存的命令中,建议通过 .pgpass 文件或交互式提示输入密码。
关于 pg_dump 的备份文件
pg_dump 是 PostgreSQL 最常用的逻辑备份工具,它能将单个数据库导出为 SQL 脚本或二进制归档文件。根据后续恢复需求的不同,可以选择不同的输出格式。
若希望生成标准的 SQL 文本文件,以便通过 psql 逐行执行恢复,可以使用以下命令:
pg_dump -h 127.0.0.1 -p 5432 -U postgres -d appdb -f appdb.sql
其中 -h、-p、-U 和 -d 分别指定主机、端口、用户和数据库名,-f 指定输出文件路径。这种格式可读性强,适合小型数据库或需要手动编辑 SQL 的场景。
若需要更高效的恢复速度、并行处理或选择性恢复特定对象,建议使用自定义格式(Custom Format):
pg_dump -h 127.0.0.1 -p 5432 -U postgres -d appdb -Fc -f appdb.dump
参数 -Fc 指示生成自定义格式的归档文件。备份完成后,务必检查文件是否成功生成,并确认当前用户对备份目录拥有写入权限。文件大小和生成时间是判断备份是否完整的第一道防线。
关于 Navicat 备份入口
虽然命令行功能强大,但 Navicat for PostgreSQL 提供了便捷的图形化备份入口,适合快速执行常规备份任务。在左侧对象树中选中目标数据库后,右键菜单中通常包含“备份”或“转储”选项。

Navicat备份设置对话框
不同版本的 Navicat 菜单命名可能略有差异,但核心设置项基本一致。在备份对话框中,你需要选择输出文件路径、文件格式(如 SQL 或 Custom)、以及备份范围。特别注意,若需完整备份,应确保勾选了所有必要的模式(Schema)和对象类型。如果仅备份部分表,务必记录清楚所选对象,以免恢复时遗漏关键数据。生成文件后,建议立即在文件系统中核对文件大小,确保其与预期相符。
关于 psql 恢复 SQL 脚本
对于之前生成的普通 SQL 文件,可以使用 psql 工具将其内容重新导入到目标数据库中。在执行恢复前,目标数据库必须已经存在,且执行用户具备创建表、序列等对象的权限。
psql -h 127.0.0.1 -p 5432 -U postgres -d appdb_restore -f appdb.sql
如果原始备份中包含特定的所有者(Owner)或权限设置,目标环境可能需要预先创建相应的角色,或者在备份时使用 --no-owner 等参数调整所有权行为。恢复过程中,终端会输出执行的 SQL 语句,若有错误通常会中断或给出警告,需仔细留意。
恢复完成后,回到 Navicat 界面,右键点击目标数据库选择“刷新”,查看表、视图等对象是否已出现。若对象树未立即更新,可尝试断开重连或手动刷新节点。

关于 psql 恢复 SQL 脚本
关于 pg_restore 恢复归档
自定义格式的归档文件必须使用 pg_restore 进行恢复。该工具支持更灵活的控制,例如只恢复特定表或跳过某些对象。
最基本的恢复命令如下:
pg_restore -h 127.0.0.1 -p 5432 -U postgres -d appdb_restore appdb.dump

pg_restore命令执行示意
如果目标数据库中已存在同名对象,pg_restore 默认可能会报错或跳过,具体行为取决于参数设置。在生产环境中,通常建议恢复到空数据库,或使用 --clean 参数先删除现有对象(需谨慎使用)。若不确定归档内容,可以先使用 -l 参数列出归档中的对象列表:
pg_restore -l appdb.dump
通过查看列表,可以确认归档中是否包含所需的表结构、数据、索引及权限信息。在进行部分恢复时,务必注意对象间的依赖关系,避免只恢复数据而缺失表结构,或恢复表后缺少依赖的类型与函数。
关于恢复后的对象检查
恢复操作的最后一步是验证数据的完整性和可用性。在 Navicat 中刷新目标数据库后,应依次检查模式、表、视图、函数和索引等关键对象。
重点检查内容包括:
- 关键表是否存在,列类型、主键和约束是否与源库一致。
- 重要表中的数据量是否与备份时的统计相符。
- 视图、存储过程和触发器等非表对象是否已正确重建。
- 应用账户是否具备对恢复后对象的访问权限。
此外,可以在 Navicat 的查询编辑器中执行简单的只读查询来辅助验证:
SELECT current_database(), current_user;
这条语句能帮助确认当前连接上下文是否正确,避免误在源库或其他测试库中进行检查。对于生产环境的恢复验证,所有检查语句都应确保只读性质,防止意外修改数据。
关于备份文件与恢复环境
需要明确的是,pg_dump 生成的备份文件主要针对单个数据库的逻辑对象,并不包含全局角色、表空间配置或服务器参数等信息。完整的灾备方案还需结合 pg_dumpall 或其他集群级备份工具。

备份文件与日志目录示意
在跨版本或跨环境恢复时,还需注意 PostgreSQL 大版本兼容性、扩展插件(Extensions)的安装状态以及字符集设置。建议定期在测试环境中演练恢复流程,保留备份文件、命令参数、生成时间及验证记录。对于自动化备份,可将经过测试的命令交由任务调度器执行,并将日志输出到受控目录,确保备份策略的可靠性和可追溯性。

































