一、基本的概念及介绍
pg_dump 是 PostgreSQL 数据库系统提供的一个实用程序,用于备份数据库的内容。它可以将数据库的结构和数据以文本格式或其他格式导出到文件中,这些文件可以用于在其他环境中恢复数据库。pg_dump 是一个逻辑备份工具,它通过查询数据库来获取数据,因此可以在数据库正在使用时进行备份,而不会阻塞其他用户的访问。
注意:在使用 pg_dump 之前,确保你的系统上已经安装了 PostgreSQL。
二、pg_dump备份使用
pg_dump可以按照不同的方式进行转储,包括:
完全转储:导出数据库的所有对象和数据。
自定义转储:选择性地导出指定的对象和数据,例如只导出特定的表或模式。
只转储数据:只导出数据库中的数据,不包括表结构等定义信息。
1、pg_dump备份使用:备份整个数据库的所有内容
2、pg_dump备份使用:备份指定表
3、pg_dump备份使用:只备份表结构
4、pg_dump备份使用:只备份表数据
三、pg_dump的常用选项和参数
语法:
pg_dump [选项]... [数据库名]
pg_dump -U <username> -h <hostname> -p <port> <database_name> > <backup_file.sql>
pg_dump提供了多种选项和参数,可以根据需求进行灵活配置。以下是一些常用的选项:
-h, --host=主机名:指定数据库服务器的主机名或IP地址。
-p, --port=端口:指定数据库服务器的端口。
-U, --username用户名=名字:连接数据库时使用的用户名。
-w, --no-password:从不提示输入密码。
-W, --password:强制口令提示(自动)。
-F, --format=c|d|t|p:输出格式(定制,目录,tar,纯文本)常见格式如:c:自定义格式(推荐使用)。t:TAR 格式。p:纯文本格式。
-v, --verbose:详细模式。
-V, --version:显示版本信息,然后退出。
-Z, --compress=0-9:压缩输出数据。
-f, --file=文件名:指定备份文件的保存路径。
-s:--schema-only仅导出数据库的结构(schema)。
-a 或 --data-only:只导出数据,不导出结构(表定义)。
例如:
pg_dump -U 用户名 -h localhost -p 5432 mydatabase(数据库) > mydatabase_backup.sql
四、备份数据库
备份整个数据库
pg_dump -U 用户名 -h localhost -p 5432 -d mydb -F c -f /backup/mydb.dump
该命令会将名为mydb的数据库备份为一个自定义格式的文件,并保存到/backup/mydb.dump路径下。
备份整个数据库到 SQL 文件
pg_dump -U 用户名 -h localhost -p 5432 mydb -f mydb.sql
备份整个数据库到自定义格式文件:
pg_dump -U 用户名 -h localhost -p 5432 mydb -F c -f mydb.dump
备份单个表
pg_dump -U 用户名 -h localhost -p 5432 -d mydb -t mytable -F c -f /backup/mytable.dump
该命令会将名为mytable的表从mydb数据库中导出,并保存为自定义格式的文件。
仅备份数据库结构
pg_dump -U 用户名 -h localhost -p 5432 -d mydb -s -F c -f /backup/mydb_schema.dump
该命令会只导出mydb数据库的schema信息,不包括实际数据。
备份到纯文本格式
pg_dump -U 用户名 -h localhost -p 5432 -d mydb -F p -f /backup/mydb.sql
该命令会将mydb数据库备份为纯文本格式的SQL文件,可以直接查看和编辑。
备份特定表到 SQL 文件
pg_dump -U 用户名 -h localhost -p 5432 mydb -t demotable -f mydb.sql
五、pg_dump的还原操作
1、还原自定义格式或TAR格式的备份
使用 pg_restore 命令可以从 pg_dump 创建的备份文件中恢复数据库。
pg_restore -U username -d mydatabase -1 mydatabase.dump
这里 -d 选项后面跟的是要恢复的数据库名,-1 选项表示恢复之前先进入单用户模式。
使用pg_restore命令来还原自定义格式或TAR格式的备份文件:
pg_restore -U postgres -h localhost -p 5432 -d mydb -F c /backup/mydb.dump
该命令会将/backup/mydb.dump备份文件中的数据恢复到mydb数据库中。
2、从纯文本备份恢复
对于纯文本格式的备份文件,直接使用psql命令恢复:
psql -U postgres -h localhost -p 5432 -d mydb -f /backup/mydb.sql
该命令会将/backup/mydb.sql备份文件中的SQL语句执行到mydb数据库中。
3、先删除数据库对象后恢复
如果你需要在恢复前清空数据库中的对象,可以使用 -c 参数:
pg_restore -U <用户名> -h <主机名> -p <端口号> -d <目标数据库名> -c -F c <备份文件路径>
-c:表示在恢复之前会先删除数据库中的已有对象。
示例:
pg_restore -U postgres -h localhost -p 5432 -d mydb -c -F c /backup/mydb.dump
六、常见问题
1、权限问题
如果出现权限不足的问题,确保执行命令的用户对备份文件路径和 PostgreSQL 数据库拥有足够的权限。使用root赋予权限
2、指定数据库角色
在恢复数据库时,可以使用 -O 选项忽略创建对象时的所有者信息,并用当前登录用户作为对象所有者:
pg_restore -U <用户名> -h <主机名> -p <端口号> -d <目标数据库名> -O -F c <备份文件路径>
pg_dump -U 用户名 -h localhost -p 5432 mydatabase(数据库) > mydatabase_backup.sqlpg_dump 是一个强大的工具,可以在多种场景下使用,确保数据库的安全和数据的完整性。




