在 PostgreSQL 备份和恢复数据库指南
本文介绍如何使用 pg_dump 和 pg_dumpall 备份 PostgreSQL 数据库以及如何使用 pg_restore 恢复 PostgreSQL 数据库。
PostgreSQL 提供了 pg_dump 和 pg_dumpall 工具,帮助您轻松地备份数据库,同时,PostgreSQL 提供了 pg_restore 工具,帮助您轻松的恢复数据库。
作为数据库管理员,备份和恢复是必备的技能。 PostgreSQL 为我们提供了很多方便的工具或命令来做到这些。
备份数据库的工具或命令:
pg_dump工具用于备份单个 PostgreSQL 数据库pg_dumpall工具用于备份 PostgreSQL 服务器中的所有的数据库。
恢复数据库的工具或命令:
pg_restore工具用于恢复由pg_dump工具产生的 tar 文档和目录文档。psql工具可以导入pg_dump和pg_dumpall工具产生的 SQL 脚本文件。\i命令可以导入pg_dump和pg_dumpall工具产生的 SQL 脚本文件。
使用 pg_dump 备份一个数据库
PostgreSQL 自带了 pg_dump 工具用于备份单个 PostgreSQL 数据库。 以下是一个常用的备份命令:
pg_dump -U username -W -F t db_name > output.tar
说明:
-
-U username: 指定连接 PostgreSQL 数据库服务器的用户。您可以在username位置使用自己的用户名。 -
-W: 强制pg_dump在连接到 PostgreSQL 数据库服务器之前提示输入密码。按回车后,pg_dump会提示输入postgres用户密码。 -
-F: 指定输出文件的格式,它可以是以下格式之一:c: 自定义格式d: 目录格式存档t: tar 文件包p: SQL 脚本文件
-
db_name是要备份的数据库的名字。 -
output.tar是输出文件的路径。
如果您在命令行或者终端工具中运行命令是提示找不到 pg_dump 工具,请先导航到 PostgreSQL bin 文件夹。例如:
C:\>cd C:\Program Files\PostgreSQL\14\bin
使用 pg_dumpall 备份所有数据库
除了 pg_dump 工具,PostgreSQL 还提供了可以一次备份所有数据库的 pg_dumpall 工具备份。 该 pg_dumpall 工具的用法如下:
pg_dumpall -U username > output.sql
使用 pg_restore 恢复数据库
PostgreSQL 提供了 pg_restore 工具用于恢复由 pg_dump 工具产生的 tar 文档和目录文档。
pg_restore 工具的用法如下:
pg_restore [option...] file_path
说明:
file_path是要恢复的文件或者目录的路径。option是一些恢复数据时用到的参数,比如,数据库,主机,端口 等。 您可以使用如下选项:参数 说明 -a--data-only只恢复数据,而不恢复表模式(数据定义)。 -c--clean创建数据库对象前先清理(删除)它们。 -C--create在恢复数据库之前先创建它。 -d dbname--dbname=dbname与数据库 dbname 联接并且直接恢复到该数据库中。 -e--exit-on-error如果在向数据库发送 SQL 命令的时候碰到错误,则退出。缺省是继续执行并且在恢复 结束时显示一个错误计数。 -f filename--file=filename声明生成的脚本的输出文件,或者出现-l 选项时用于列表的文件,缺省是标准输出。 -F format--format=format声明备份文件的格式。 -i--ignore-version忽略数据库版本检查。 -I index--index=index只恢复命名的索引。 -l--list列出备份的内容。这个操作的输出可以用 -L 选项限制和重排所恢复的项目。 -L list-file--use-list=list-file只恢复在 list-file 里面的元素,以它们在文件中出现的顺序。 -n namespace--schema=schema只恢复指定名字的模式里面的定义和/或数据。不要和 -s 选项混淆。这个选项可以和 -t 选项一起使用。 -O--no-owner不要输出设置对象的权限,以便与最初的数据库匹配的命令。 -s--schema-only只恢复表结构(数据定义)。不恢复数据,序列值将重置。 -S username--superuser=username设置关闭触发器时声明超级用户的用户名。只有在设置了 –disable-triggers 的时候 才有用。 -t table--table=table只恢复表指定的表的定义和/或数据。 -T trigger--trigger=trigger只恢复指定的触发器。 -v--verbose声明冗余模式。 -x--no-privileges--no-acl避免 ACL 的恢复(grant/revoke 命令) -X use-set-session-authorization--use-set-session-authorization输出 SQL 标准的 SET SESSION AUTHORIZATION 命令,而不是 OWNER TO 命令。 -X disable-triggers--disable-triggers这个选项只有在执行仅恢复数据的时候才相关。 -h host--host=host声明服务器运行的机器的主机名。 -p port--port=port声明服务器侦听的 TCP 端口或者本地的 Unix 域套接字文件扩展。 -U username以给出用户身分联接。 -W强制给出口令提示。如果服务器要求口令认证,那么这个应该自动发生。
最常用的 pg_restore 用法如下:
pg_restore -d db_name path_to_db_backup_file.tar
如何使用 psql 恢复数据库
您可以使用 psql 工具从一个 sql 文件中恢复数据。 以下是使用 psql 从 sql 文件恢复数据的基本用法:
psql -U username -f path_to_db_backup_file.sql
使用 \i 命令导入 sql 文件
您还可以 \i 命令导入 sql 文件。 以下演示了导入 sakila 示例数据库的步骤:
-
启动 psql 工具并连接 PostgreSQL 服务器:
.\psql.exe -U postgres根据提示输入 postgres 用户的密码,然后按下回车键。
-
创建 sakila 数据库
CREATE DATABASE sakila; -
连接 sakila 数据库
\c sakila; -
分别使用以下两个语句以导入刚刚下载的两个文件
postgres-sakila-schema.sql和postgres-sakila-insert-data.sql:\i C:/Users/Adam/Downloads/postgres-sakila-schema.sql \i C:/Users/Adam/Downloads/postgres-sakila-insert-data.sql请注意,请使用
/替换文件路径中的\。
结论
本文讨论了备份和恢复 PostgreSQL 数据库的几种方法。