pg_dump 备份数据库
命令格式
pg_dump dbname > bakfile
或者
pg_dump dbname -f bakfile
备份示例
- 备份为文本(即 SQL 文件)
pg_dump -v -h 127.0.0.1 -p 5432 -U postgres testdb > db.sql
SQL 文件无法使用 pg_restore 恢复, 仅支持 psql 命令直接导入
psql -d new_db -f db.sql
或者
psql -d new_db < db.sql
- 压缩备份
pg_dump -Fc -Z 9 testdb > db.dmp
-F 选项指定导出文件的格式, 默认为文本格式
- -p 文本格式(plain)
- -c 自定义格式(custom)
- -t tar 包格式
- -d 目录格式(directory)
-Z 选项指定压缩级别, 取值为 0-9, 0 表示不压缩
对于自定义和目录格式不加该选项时自动决定适当的压缩级别, 另外 tar 格式不支持压缩, 文本格式默认不压缩
- 并行备份
仅限于目录格式
pg_dump -Fd -j 2 testdb -f dmp_dir
dmp_dir 目录中, 每一张表对应一个备份文件(xxxx.dat.gz)
目录格式的压缩级别表示每一张表对应备份文件的压缩等级
- 仅备份部分表
pg_dump -Fc -t table testdb > table.dmp
注意 pd_dump 仅导出指定的表, 其依赖的表不会导出
pg_restore 恢复数据库
命令格式
pg_restore -d dbname bakfile
恢复示例
- 直接导入
创建待导入数据库
$ sudo -u postgres psql
psql (12.10 (Ubuntu 12.10-0ubuntu0.20.04.1))
Type "help" for help.
postgres=
CREATE DATABASE
或者直接在 shell 中执行
$ createdb new_db
导入数据库
pg_restore -v -d new_db db.dmp
在导入的过程中, PostgreSQL 会尝试更新数据库对象的所有者为原始数据库中的角色
- 不更新数据库对象的所有者
增加 -O 或 --no-owner 选项
pg_restore -O -d new_db db.dmp
- 并行导入
支持自定义和目录格式
pg_restore -j 3 -O -d new_db db.dmp
pg_restore -j 3 -O -d new_db dmp_dir/
- 导入前自动删除已有数据
pg_restore -O -c --if-exists -d new_db db.dmp
-c 或 --clean 表示导入前删除数据库对象
- 仅导入数据库的定义结构
创建表, 索引以及约束等内容
pg_restore -d new_db -s db.dmp
-s 或 --schema-only: 仅导入数据库的定义, 不导入数据
- 仅导入数据
已有表结构, 仅导入某张表的数据
# 在示例 5 的基础上导入表的数据
pg_restore -d new_db -t table -a table.dmp
-a 或 --data-only: 仅导入数据
|