更新时间:2024-09-26 gmt 08:00
pg-九游平台
简介
pg_dump是postgresql原生的备份工具。pg_dump生成的备份文件可以是一个sql脚本文件,也可以是一个归档文件。详细信息请查看。
- sql脚本文件:纯文本格式的文件,其中包含将数据库重建到备份时状态的sql命令。
- 归档格式的备份文件:必须与pg_restore一起使用来重建数据库,这种格式允许pg_restore选择恢复哪些数据。
注意事项
pg_dump适合单个库、schema级、表级导出,只会导出表及数据、函数等,数据库和用户需要提前在要恢复的库创建。
- --format=custom:备份为二进制格式,二进制格式的备份只能使用pg_restore来还原,并且可以指定还原的表。
- --format=plain:备份为文本,文本格式的备份还原,直接使用用户连接到对应的数据库执行备份文本即可。
限制条件
在使用pg_dump和pg_restore进行备份和恢复时,确保源数据库和目标库的版本一致,以避免出现兼容性问题,如果版本不一致可能会导致数据丢失或无法正确还原数据。
准备测试数据
# 创建数据库 create database dump_database; # 登录dump_database数据库 \c dump_database # 创建表1并插入数据 create table dump_table(id int primary key, content char(50)); insert into dump_table values(1,'aa'); insert into dump_table values(2,'bb'); # 创建表2并插入数据 create table dump_table2(id int primary key, content char(50)); insert into dump_table2 values(1,'aaaa'); insert into dump_table2 values(2,'bbbb');
使用pg_dump将数据库导出至sql文件
语法
pg_dump --username=--host= --port= --format=plain --file=
- db_user为数据库用户。
- db_ipaddress为数据库地址。
- db_port为数据库端口。
- backup_file为要导出的文件名称。
- db_name为要导出的数据库名称。
- --format为导出的文件格式,plain为输出纯文本sql脚本文件(默认)。其他选项详见。
示例
- 导出数据库至sql文件(insert语句)。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --inserts --file=backup.sql dump_database password for user root:
- 导出数据库中所有表结构至sql文件。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --schema-only --file=backup.sql dump_database password for user root:
- 导出数据库中所有表数据至sql文件。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --data-only --file=backup.sql dump_database password for user root:
命令执行完会生成“backup.sql”文件,如下:
[rds@localhost ~]$ ll backup.sql -rw-r----- 1 rds rds 5657 may 24 09:21 backup.sql
使用pg_dump将数据库中的表导出至sql文件
语法
pg_dump --username=--host= --port= --format=plain --file= --table=
- db_user为数据库用户。
- db_address为数据库地址。
- db_port为数据库端口。
- backup_file为要导出的文件名称。
- db_name为要迁移的数据库名称。
- table_name为要迁移的数据库中指定表名称。
- --format为导出的文件格式,plain为输出纯文本sql脚本文件(默认)。其他选项详见。
示例
- 导出数据库中指定的单表至sql文件。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --file=backup.sql dump_database --table=dump_table password for user root
- 导出数据库中指定的多表至sql文件。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --file=backup.sql dump_database --table=dump_table --table=dump_table2 password for user root:
- 导出数据库中以ts_开头的所有表至sql文件。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --file=backup.sql dump_database --table=ts_* password for user root:
- 导出数据库中除ts_开头之外的所有表至sql文件。
$ pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --file=backup.sql dump_database -t=ts_* password for user root:
命令执行完会生成“backup.sql”文件,如下:
[rds@localhost ~]$ ll backup.sql -rw-r----- 1 rds rds 5657 may 24 09:21 backup.sql
使用pg_dump导出特定schema下的数据
语法
pg_dump --username=--host= --port= --format=plain --schema= --table=
- db_user为数据库用户。
- db_ipaddress为数据库地址。
- db_port为数据库端口。
- backup_file为要导出的文件名称。
- db_name为要导出的数据库名称。
- schema为要导出的schema名称。
- --format为导出的文件格式,plain为输出纯文本sql脚本文件(默认)。其他选项详见。
示例
- 导出指定库中public schema的所有数据。
pg_dump --username=root --host=192.168.61.143 --port=5432 --format=plain --schema=public dump_database > backup.sql
- 导出指定库中除public schema以外的所有数据,结果以自定义压缩格式导出。
pg_dump --username=root --host=192.168.61.143 --port=5432 --format=custom -b -v -n public dump_database > all_sch_except_pub.backup
还原数据
使用纯文本sql脚本文件导出的数据,还原时直接使用psql命令即可,比如:
# 还原特定数据库 psql --username=root --host=192.168.61.143 --port=5432 backup_database < backup.sql # 还原特定表 psql --username=root --host=192.168.61.143 --port=5432 backup_database --table=dump_table < backup.sql # 还原特定schema psql --username=root --host=192.168.61.143 --port=5432 backup_database --schema=public < backup.sql

在恢复之前在目标库中创建数据库backup_database。
使用其他格式导出的数据进行还原时,需要使用pg_restore。用于恢复由pg_dump转储的任何非纯文本格式中的postgresql数据库。
pg_restore --username=root --host=192.168.61.143 --port=5432 --dbname=backup_database --format=custom all_sch_except_pub.backup --verbose
常见问题
- 如果在使用pg_dump导出时,报错用户权限不足。
解决方法:
检查是否使用的root用户导出,如果不是root用户则会报权限不足;如果使用root用户导出,仍然提示没有权限,请检查数据库版本,root用户执行pg_dump命令需要内核版本为支持root提权的版本,支持root提权版本情况见root用户权限说明。
- 将备份的文件导入到rds for postgresql目标数据库时发现control_extension等几个函数报错。
解决方法:
由于目标库中自带这些函数,因此该报错可以忽略。
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨