pg_dump
逻辑备份
PG提供了pg_dump、pg_dumpall两种方式进行逻辑备份,其区别就是pg_dumpall只能将数据库全部数据集dump到一个脚本文件中,而pg_dump可以选择指定数据库进行逻辑备份。两者均可以保证dump数据的一致性,且不阻塞其他会话的正常读写操作。
pg_dump语法
pg_dump [connection_option] [option] [dbname]
connection_option
参数 | 含义 |
-h/--host | 主机host |
-p/--port | 端口port |
-U | 用户名username |
-w | 从不提示密码,若服务器请求需要密码认证,且密码无法通过其他方式获取会导致命令连接失败 |
-W | 强制pg_dump连接一个数据库之前提示密码,一般不需要关注该参数 |
--role | 若验证用户权限不够该命令可保证切换至到相应权限的角色下 |
dbname | 指定逻辑备份数据库 |
option
参数 | 含义 |
-a/--data-only | 只输出数据、不输出表定义SQL语句,只针对纯文本格式有意义 |
-b/--blob | dump是否包含大对象,该参数默认打开 |
-c/--clean | 是否包含清理对象语句,只针对纯文本格式有意义 |
-C/--create | 是否输出create database语句,只针对纯文本格式有意义 |
-E/--encoding | 指定字符集编码格式 |
-f/--file | 输出到指定文件 |
-F/--format | p、c、d、t四种格式,详情如下 |
-n/--schema | 只转储满足匹配下的schema包含的对象、可指定多个模式、也可以使用通配符匹配 |
-N/--exclude-schema | 不转储满足匹配条件下指定的schema下的对象 |
-O/--no-owner | 表示不把对象所有权设置为源数据库中的owner |
-s/--schema-only | 只输出对象定义,不输出数据 |
-t/--table | 只转储满足匹配的表、视图、序列 |
-T/--exclude-table | 不转储满足匹配条件下的表 |
-Z/--compress=0...9 | 压缩级别,0表示不压缩。默认不压缩 |
--insert | 将数据转储为SQL语句格式,该参数下恢复速度会很慢 |
--column-inserts | 转储为Insert into table(col,..) values的格式,避免了--insert下源目标端表列顺序不一致导致数据恢复报错 |
--lock-wait-timeout | 指定在dump时等待获取共享表锁的超时时间 |
--no-tablespaces | 转储数据不输出选择指定的表空间,表示恢复数据都使用默认表空间 |
pg_dump 支持4种格式
p, plain:
默认格式, 备份输出为可读的text文本. 还原时在数据库中直接执行备份文本的SQL即可.
c, custom
可自定义的归档格式, 同时默认开启了数据压缩,还原时可以调整备份对象的还原顺序,同时支持选择还原的对象。
备份写入到一个文件中. 需要注意文件系统支持的单个文件大小。
这个格式必须使用pg_restore命令进行还原。
d, directory
目录归档格式, 与custom格式类似, 需要使用pg_restore还原. 但是目录归档格式下会创建一个目录, 然后每个表或者每个大对象对应一个备份输出文件.
加上TOC文件名描述备份的详细信息, 这个格式默认支持压缩, 同时支持并行导出.
t, tar
tar归档格式, 不支持压缩, 同时限制每个表最大不能超过8GB, 同样需要使用pg_restore还原.
示例
备份指定数据库下所有对象
pg_dump -U xxx -p xxx -h xxx db_name -f db_name.sql
备份指定数据库下的指定表
--备份public下的t1、t2表 pg_dump -U xxx -p xxx -h xxx db_name -n public -t t1 -t t2 --备份public下的满足t1*的所有表 pg_dump -U xxx -p xxx -h xxx db_name -n public -t 't1*'
将逻辑备份转储为custom-format的归档文件
pg_dump -U xxx -p xxx -h xxx db_name -Fc -f db1.dump
将逻辑备份通过directory-format进行归档备份,并开启一定并发线程
pg_dump -U xxx -p xxx -h xxx db_name -Fd -j 5 -f back.sql