PostgreSQL pg_dump 与 pg_restore 命令

pg_dump 备份数据库

命令格式
pg_dump dbname > bakfile
或者
pg_dump dbname -f bakfile

备份示例
  1. 备份为文本(即 SQL 文件)
# -v 选项显示导出过程
pg_dump -v -h 127.0.0.1 -p 5432 -U postgres testdb > db.sql

# 后面的示例中均省略 -h -p -U 等数据库连接选项

SQL 文件无法使用 pg_restore 恢复, 仅支持 psql 命令直接导入

psql -d new_db -f db.sql
或者
psql -d new_db < db.sql

  1. 压缩备份
# 9级压缩
pg_dump -Fc -Z 9 testdb > db.dmp

-F 选项指定导出文件的格式, 默认为文本格式

  • -p 文本格式(plain)
  • -c 自定义格式(custom)
  • -t tar 包格式
  • -d 目录格式(directory)

-Z 选项指定压缩级别, 取值为 0-9, 0 表示不压缩

对于自定义和目录格式不加该选项时自动决定适当的压缩级别, 另外 tar 格式不支持压缩, 文本格式默认不压缩


  1. 并行备份

仅限于目录格式

# 同时备份两张表的数据, 打开 3(2+1) 个数据库的连接
pg_dump -Fd -j 2 testdb -f dmp_dir

dmp_dir 目录中, 每一张表对应一个备份文件(xxxx.dat.gz)

目录格式的压缩级别表示每一张表对应备份文件的压缩等级

  1. 仅备份部分表
# 可以通过多个 -t 选项指定多张表
# -t 选项支持通配符
pg_dump -Fc -t table testdb > table.dmp

注意 pd_dump 仅导出指定的表, 其依赖的表不会导出


pg_restore 恢复数据库

命令格式
pg_restore -d dbname bakfile
恢复示例
  1. 直接导入

创建待导入数据库

# 以 postgres 的身份执行 psql
$ sudo -u postgres psql
psql (12.10 (Ubuntu 12.10-0ubuntu0.20.04.1))
Type "help" for help.

postgres=# create database new_db;
CREATE DATABASE

# 后面的示例中省略数据库创建的过程

或者直接在 shell 中执行

$ createdb new_db

导入数据库

# -v 选项显示导入过程
pg_restore -v -d new_db db.dmp

在导入的过程中, PostgreSQL 会尝试更新数据库对象的所有者为原始数据库中的角色


  1. 不更新数据库对象的所有者

增加 -O 或 --no-owner 选项

pg_restore -O -d new_db db.dmp

  1. 并行导入

支持自定义和目录格式

pg_restore -j 3 -O -d new_db db.dmp

pg_restore -j 3 -O -d new_db dmp_dir/

  1. 导入前自动删除已有数据
pg_restore -O -c --if-exists -d new_db db.dmp

-c 或 --clean 表示导入前删除数据库对象


  1. 仅导入数据库的定义结构

创建表, 索引以及约束等内容

pg_restore -d new_db -s db.dmp

-s 或 --schema-only: 仅导入数据库的定义, 不导入数据


  1. 仅导入数据

已有表结构, 仅导入某张表的数据

# 在示例 5 的基础上导入表的数据
pg_restore -d new_db -t table -a table.dmp

-a 或 --data-only: 仅导入数据

猜你喜欢

转载自blog.csdn.net/jiang_huixin/article/details/124743623