备份与恢复

  • postgresql自带了两个备份工具:
pg_dump:可备份一个指定的database
pg_dumpall:可一次性备份所有database数据以及系统全局数据 

使用pg_dump备份

pg_dump支持精确指定要备份的表、schema、和database
备份文件可以是SQL文件格式、自定义压缩格式或者tar包格式
  • pg_dump 常用选项
## 通用选项:
-f, --file=FILENAME 输出文件名或目录名
-F, --format=c|d|t|p 输出文件格式(自定义、目录格式、tar包格式、纯文本)
-j, --jobs=NUM 使用多个并行作业进行转储
-v, --verbose 详细信息模式 ## 详细模式:
-b, --blobs 在转储中包括大对象
-c, --clean 在重新创建之前,先清除(删除)数据库对象
-C, --create 在转储中包括命令,以便创建数据库(包括建库语句,无需在导入之前先建数据库)
-n, --schema=SCHEMA 只转储指定名称的模式
-N, --exclude-schema=SCHEMA 不转储已命名的模式
-t, --table=TABLE 只转储指定名称的表
--column-inserts 以带有列名的INSERT命令形式转储数据 ## 控制输出内容选项:
-d, --dbname=DBNAME 数据库名
-h, --host=HOSTNAME 数据库服务器的主机名或套接字目录
-p, --port=PORT 数据库服务器的端口号
-U, --username=NAME 以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
--role=ROLENAME 在转储之前执行SET ROLE命令  
  • 备份某个database,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -f mydb.backup mydb  
  • 备份某个database,备份结果以SQL文本格式输出,输出结果要包含CREATE DATABASE 语句:
pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb
  • 备份某个database中所有名称以"pay"开头的表,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *.pay* -f pay.backup mydb  
  • 备份某个database中hr和payroll这两个schema中的所有数据,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -n hr -n payroll -f hr.backup mydb
  • 备份某个database中除public schema中的数据以外的所有数据,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -N public -f all_sch_except_pub.backup mydb
  • 将数据备份为SQL文本文件,且生成INSERT语句,该文件可以用于低版本的PostgreSQL或其它支持SQL的非PostgreSQL数据库
pg_dump -h localhost -p 5432 -U someuser -F p --column-inserts -f select_tables.backup mydb
  • 目录备份格式:备份时会先创建一个新目录,然后逐一将一个gzip格式的压缩文件和一个列出所有包含结构的文件填充到该目录。
pg_dump -h localhost -p 5432 -U someuser -F d -f /root/test/ mydb
  • 支持使用备份选项 --jobs(-j),会启动多个线程并行执行当前备份操作
pg_dump -h localhost -p 5432 -U someuser -j 4 -F d -f /root/test/ mydb

使用pg_dumpall进行全库备份

pg_dumpall不支持导出SQL文件以外的其他格式
pg_dumpall可以将当前所有database数据导出为SQL文本
可以同时导出表空间定义和角色等全局对象
建议每天对角色和表空间定义等全局对象进行备份,但不建议每天使用pg_dumpall来备份全库数据  
  • pg_dumpall 常用选项
## 通用选项:
-f, --file=FILENAME 输出文件名
-v, --verbose 详细信息模式 ## 控制输出内容选项:
-a, --data-only 仅转储数据,而不转储schema
-g, --globals-only 仅转储全局对象,而不转储数据库
-r, --reles-oly 仅转储角色,而不转储数据库和表空间
-s, --schema-only 仅转储shema,而不转储数据
--inserts 以INSERT命令(而非COPY命令)的形式转储数据 ## 连接选项:
-d, --dbname=DBNAME 数据库名
-h, --host=HOSTNAME 数据库服务器的主机名或套接字目录
-l, --database=DBNAME 代替默认数据库
-p, --port=PORT 数据库服务器的端口号
-U, --username=NAME 以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
--role=ROLENAME 在转储之前执行SET ROLE命令  
  • pg_dumpall备份数据库
pg_dumpall -U postgres -h localhost -p 5432 -v -f all.backup  
  • pg_dumpall仅备份角色和表空间定义
pg_dumpall -h localhost -U postgres --port=5432 -f myglobals.sql --globals-only  
  • pg_dumpall仅需备份角色定义而无需备份表空间
pg_dumpall -h localhost -U postgres --port=5432 -f myroles.sql --roles-only  

数据恢复

  • PostgreSQL支持以下两种数据恢复方式:
使用psql来恢复pg_dump或pg_dumpall工具生产的sql文本格式的数据备份
使用pg_restore工具来恢复由pg_dump工具生产的自定义压缩格式、tar包格式或者目录格式备份  

使用pgsql恢复SQL文本格式的数据备份

  • 恢复一个SQL备份文件并忽略过程中可能发生的所有错误
psql -U postgres -f myglobals.sql
  • 恢复一个SQL备份文件,如遇错误则立即停止恢复
psql -U postgres --set ON_ERROR_STOP=on -f myglobals.sql
  • 将SQL文本中的数据恢复到某个指定的database
psql -U postgres -d mydb -f select_objects.sql  

使用pg_restore进行恢复

  • pg_restore 常用参数
## 通用选项:
-d, --dbname=DBNAME 数据库名
-f, --file=FILENAME 输入文件名
-F, --format=c|d|t 输入文件格式(可以自动识别)
-v, --verbose 详细信息模式 ## 详细模式:
-a, --data-only 仅恢复数据,而不恢复schema
-C, --create 创建目标数据库
-j, --jobs=NUM 使用多个并行作业进行恢复
-s, --schema-only 仅恢复shema,而不恢复数据
--section=SECTION 恢复命名部分(包括三个部分:pre-data,data以及post-data。\
data部分包含表记录数据、大对象数据以及序列的值;\
post-data部分包含索引、触发器、规则和约束的定义;\
pre-data部分包含除此外其他所有的对象定义) ## 控制输出内容选项:
-h, --host=HOSTNAME 数据库服务器的主机名或套接字目录
-p, --port=PORT 数据库服务器的端口号
-U, --username=NAME 以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
--role=ROLENAME 在转储之前执行SET ROLE命令  
  • 先创建目标数据库
CREATE DATABASE mydb;  
  • 执行恢复
pg_restore --dbname=mydb --jobs=4 --verbose mydb.backup
  • 如果备份和恢复使用相同的database,则可以通过添加--create选项省去单独创建库的过程
pg_restore --dbname=postgres --create --jobs=4 --verbose mydb.backup
--create选项,必须先连接数据库,才能创建数据库,所有指定--dbname=postgres
  • 9.2版本或更新的pg_restore支持--section选项,实现仅恢复表结构而不恢复表数据,创建模板数据库时可以使用这个方法
CREATE DATABASE mydb2;

pg_restore --dbname=mydb2 --section=pre-data --job=4 mydb.backup  

PostgreSQL备份的更多相关文章

  1. PostgreSQL备份工具-pg_backrest(转)

    转自:http://blog.chinaunix.net/uid-7270462-id-5777877.html 官网:https://pgbackrest.org 一.配置集中备份服务器 1.1 备 ...

  2. PostgreSQL 备份和恢复

    备份和恢复有三种不同的基本方法来备份PostgreSQL数据SQL转储文件系统级备份File system level backup连续归档 1. SQL转储 pg_dump dbname > ...

  3. postgresql备份和恢复

    备份: pg_dump -d m3vg -h localhost -p 5432 -U delta -W -f 1024.dump -F tar 恢复: pg_restore -h localhost ...

  4. postgreSQL 备份+还原多张表

    -U表示用户 -h表示主机 -p表示端口号 -t表示表名 -f表示备份后的sql文件的名字 -d表示要恢复数据库名 一.打开cmd 进入postgresql安装路径下的bin文件夹,以我的为例: cd ...

  5. postgresql 备份数据库结构

    --只备份结构pg_dump -U postgres -d grgzpt -f D:\dump.sql -s --备份结构和数据pg_dump -U postgres -d grgzpt -f D:\ ...

  6. PostgreSQL 备份

    # WAL日志: # 我们对数据库的增删改查创建之前先是将sql语句记录在WAL日志中, # 只有日志记录刷新到磁盘后,才能写入数据库文件. # 遵从这个过程,不需要在每个事务提交时都刷新数据页到数据 ...

  7. postgreSQL备份数据

    1.pg_dump 备份单一数据库 pg_dump仅导出数据库结构: pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1 2.全部备份采用pg_dumpall ...

  8. PostgreSQL备份和恢复数据表

    备份数据表: pg_dump -U user_name db_name -t table_name -f /tmp/backup_file.suffix 恢复数据表: 方法1: 登录数据库:\i /t ...

  9. postgresql备份数据库

    备份数据库:pg_dump -U username -h localhost -f /me.sql 数据库名; 恢复数据库:psql -U username -h localhost -f /me.s ...

随机推荐

  1. 解决org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

    这个问题来的有点莫名奇妙,之前我的hadoop运行一直是正常的,某一天开始运行Mapreduce就报这个错. 试过很多种方法都没有用,比如 1.path环境变量2.Hadoop bin目录下hadoo ...

  2. 八步学会数据迁移:ETL工具kettle使用方法

    一.目的 将不同服务器上的表合并到另外一个服务器上.例如:将服务器1上的表A和服务器2上的表B,合并到服务器3上的表C 要求:表A需要被裁剪(去掉不必要的字段).表B需要增加一些字段 二.使用方法 ( ...

  3. angular 图片懒加载(延迟加载)

    github 原文 https://github.com/Treri/me-lazyload me-lazyload angular 的图像资源延迟加载指令 例子(Demo) 演示网站(Demo Si ...

  4. 将hibernate.cfg.xml文件都放到spring中时报错

    报错如下所示: 私以为是配置文件出现问题了. <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  5. SSH登陆阿里云服务器出现Permission denied (publickey)错误解决方案

    操作环境: 操作系统:Mac10.11.5 阿里云服务器:Ubuntu16.04 远程连接:SSH 注:首先我们已假设你已经自己生成了SSH秘钥,并已经配置到阿里云.绑定了自己的云服务器. 但是后来发 ...

  6. Nessus离线安装及升级插件 转

    修改Nessus Web端口 ./nessuscli fix --set xmlrpc_listen_port=8866 最近做客户的内网主机漏洞扫描,申请了一台内网主机做扫描服务器,安装Nessus ...

  7. Python — List、Set、Tuple、Dictionary之间的区别、参数传递

    1.list 列表 有序集合,随时增删.包含的数据类型可以不同:整数.浮点数.字符串.list.tuple.dict.set.bool.空值.常量. list = [12, 'Yummy', 19.2 ...

  8. mysql中的过滤分组

    本文节选自<MYSQL必知必会> 一. 过滤分组 除了能用GROUP BY分组数据外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组.例如,可能想要列出至少有两个订单的所有顾客. ...

  9. L138 Cryptocurrency Exchanges at Risk of Manipulation

    Several cryptocurrency exchanges are plagued by poor market surveillance, pervasive conflicts of int ...

  10. 微信oauth2验证

    微信公众号进行oauth2验证时的要求: 需要两个地方配置: (1)   Oauth2验证链接中的appid.redirecturi (2)   微信公众号授权回调页面域名: Appid为公众号的ap ...