PostgreSQL备份与恢复
备份数据
- 输出目录格式的归档
这个方式备份可以避免操作系统对单个文件的大小的限制
1 | pg_dump -U postgres -F -O d -f /home/back mydb |
备份完成后,会生成一个备份文件夹
tar
格式的归档(在用pg_resotre
恢复时不支持并行恢复)
1 | pg_dump -U postgres -F t postgres > mydb.tar |
- 生成
sql
脚本(不支持pg_restore
恢复)
1 | pg_dump -U postgres -F p postgres > mydb.sql |
- 生成自定格式的归档
1 | pg_dump -U postgres -F c postgres > mydb.bin |
恢复数据
- 恢复前,创建目标数据库
1 | create database mydb; |
- 恢复数据
1 | pg_restore -U postgres -d mydb -j 4 /home/back.dump |
1 | pg_restore -U postgres -d mydb -n schema -t table_name -a -O -j 4 /home/back.dump |
- 恢复结构
1 | pg_restore -U postgres -d mydb --section=pre-data -j 4 /home/back.dump |
-j 4
是并行执行线程 其中tar格式备份不支持并行恢复
附录
pg_restore
用法:
pg_restore [选项]… [文件名]
一般选项:
-d, --dbname=名字
连接数据库名字-f, --file=文件名
输出文件名(- 对于stdout)-F, --format=c|d|t
备份文件格式(应该自动进行)-l, --list
打印归档文件的 TOC 概述-v, --verbose
详细模式-V, --version
输出版本信息, 然后退出-?, --help
显示此帮助, 然后退出
恢复控制选项:
-a, --data-only
只恢复数据, 不包括模式-c, --clean
在重新创建之前,先清除(删除)数据库对象-C, --create
创建目标数据库-e, --exit-on-error
发生错误退出, 默认为继续-I, --index=NAME
恢复指定名称的索引-j, --jobs=NUM
执行多个并行任务进行恢复工作-L, --use-list=FILENAME
从这个文件中使用指定的内容表排序输出-n, --schema=NAME
在这个模式中只恢复对象-N, --exclude-schema=NAME
不恢复此模式中的对象-O, --no-owner
不恢复对象所属者-P, --function=NAME(args)
恢复指定名字的函数-s, --schema-only
只恢复模式, 不包括数据-S, --superuser=NAME
使用指定的超级用户来禁用触发器-t, --table=NAME
恢复命名关系(表、视图等)-T, --trigger=NAME
恢复指定名字的触发器-x, --no-privileges
跳过处理权限的恢复 (grant/revoke)-1, --single-transaction
作为单个事务恢复--disable-triggers
在只恢复数据的过程中禁用触发器--enable-row-security
启用行安全性--if-exists
当删除对象时使用IF EXISTS--no-comments
不恢复注释--no-data-for-failed-tables
对那些无法创建的表不进行 数据恢复--no-publications
不恢复发行--no-security-labels
不恢复安全标签信息--no-subscriptions
不恢复订阅--no-tablespaces
不恢复表空间的分配信息--section=SECTION
恢复命名节 (数据前、数据及数据后)--strict-names
要求每个表和(或)schema包括模式以匹配至少一个实体--use-set-session-authorization
使用 SESSION AUTHORIZATION 命令代替 ALTER OWNER 命令来设置所有权
联接选项:
-h, --host=主机名
数据库服务器的主机名或套接字目录-p, --port=端口号
数据库服务器的端口号-U, --username=名字
以指定的数据库用户联接-w, --no-password
永远不提示输入口令-W, --password
强制口令提示 (自动)--role=ROLENAME
在恢复前执行SET ROLE操作
选项 -I, -n, -N, -P, -t, -T, 以及 –section 可以组合使用和指定多次用于选择多个对象.
pg_dump
用法:
pg_dump [选项]… [数据库名字]
一般选项:
-f, --file=FILENAME
输出文件或目录名-F, --format=c|d|t|p
输出文件格式 (定制, 目录, tar) 明文 (默认值))-j, --jobs=NUM
执行多个并行任务进行备份转储工作-v, --verbose
详细模式-V, --version
输出版本信息,然后退出-Z, --compress=0-9
被压缩格式的压缩级别--lock-wait-timeout=TIMEOUT
在等待表锁超时后操作失败--no-sync
do not wait for changes to be written safely to disk-?, --help
显示此帮助, 然后退出
控制输出内容选项:
-a, --data-only
只转储数据,不包括模式-b, --blobs
在转储中包括大对象-B, --no-blobs
exclude large objects in dump-c, --clean
在重新创建之前,先清除(删除)数据库对象-C, --create
在转储中包括命令,以便创建数据库-E, --encoding=ENCODING
转储以ENCODING形式编码的数据-n, --schema=SCHEMA
只转储指定名称的模式-N, --exclude-schema=SCHEMA
不转储已命名的模式-o, --oids
在转储中包括 OID-O, --no-owner
在明文格式中, 忽略恢复对象所属者-s, --schema-only
只转储模式, 不包括数据-S, --superuser=NAME
在明文格式中使用指定的超级用户名-t, --table=TABLE
只转储指定名称的表-T, --exclude-table=TABLE
不转储指定名称的表-x, --no-privileges
不要转储权限 (grant/revoke)--binary-upgrade
只能由升级工具使用--column-inserts
以带有列名的INSERT命令形式转储数据--disable-dollar-quoting
取消美元 (符号) 引号, 使用 SQL 标准引号--disable-triggers
在只恢复数据的过程中禁用触发器--enable-row-security
启用行安全性(只转储用户能够访问的内容)--exclude-table-data=TABLE
不转储指定名称的表中的数据--if-exists
当删除对象时使用IF EXISTS--inserts
以INSERT命令,而不是COPY命令的形式转储数据--no-publications
do not dump publications--no-security-labels
不转储安全标签的分配--no-subscriptions
do not dump subscriptions--no-synchronized-snapshots
在并行工作集中不使用同步快照--no-tablespaces
不转储表空间分配信息--no-unlogged-table-data
不转储没有日志的表数据--quote-all-identifiers
所有标识符加引号,即使不是关键字--section=SECTION
备份命名的节 (数据前, 数据, 及 数据后)--serializable-deferrable
等到备份可以无异常运行--snapshot=SNAPSHOT
为转储使用给定的快照--strict-names
要求每个表和/或schema包括模式以匹配至少一个实体--use-set-session-authorization
使用 SESSION AUTHORIZATION 命令代替 ALTER OWNER 命令来设置所有权
联接选项:
-d, --dbname=DBNAME
对数据库 DBNAME备份-h, --host=主机名
数据库服务器的主机名或套接字目录-p, --port=端口号
数据库服务器的端口号-U, --username=名字
以指定的数据库用户联接-w, --no-password
永远不提示输入口令-W, --password
强制口令提示 (自动)--role=ROLENAME
在转储前运行SET ROLE
如果没有提供数据库名字,