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-syncdo not wait for changes to be written safely to disk-?, --help显示此帮助, 然后退出
控制输出内容选项:
-a, --data-only只转储数据,不包括模式-b, --blobs在转储中包括大对象-B, --no-blobsexclude 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-publicationsdo not dump publications--no-security-labels不转储安全标签的分配--no-subscriptionsdo 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
如果没有提供数据库名字,