侧边栏壁纸
  • 累计撰写 2,046 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

使用pg_dump和pg_restore对PostgreSql进行备份和还原

大猿本猿
2021-11-28 / 2,804 阅读 / 0 字

pg_dump是用于备份PostgreSQL数据库的工具。它可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。

每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump,而PostgreSQL提供的对应工具为pg_dumppg_restore

2、使用pg_dump对数据库进行备份

2.1 导出常用的命令

2.1.1 导出单表数据

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 –inserts > bak.sql

2.1.2 导出多个表数据

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 -t t2 –inserts > bak.sql

2.1.3 导出整个数据库

pg_dump -h 127.0.0.1 -U postgres -p 5432 -Fc testdb >/var/lib/postgresql/bak.sql

image

2.1.4 只导出表结构,不导出数据

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -s > bak.sql

2.1.5 只导出数据,不导出表结构

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db –inserts -a > bak.sql

2.2pg_dump的常用参数

-h host,指定数据库主机名,或者IP
-p port,指定端口号
-U user,指定连接使用的用户名
-W,按提示输入密码
dbname,指定连接的数据库名称,实际上也是要备份的数据库名称。
-a,–data-only,只导出数据,不导出表结构
-c,–clean,是否生成清理该数据库对象的语句,比如drop table
-C,–create,是否输出一条创建数据库语句
-f file,–file=file,输出到指定文件中
-n schema,–schema=schema,只转存匹配schema的模式内容
-N schema,–exclude-schema=schema,不转存匹配schema的模式内容
-O,–no-owner,不设置导出对象的所有权
-s,–schema-only,只导致对象定义模式,不导出数据
-t table,–table=table,只转存匹配到的表,视图,序列,可以使用多个-t匹配多个表
-T table,–exclude-table=table,不转存匹配到的表。
–inserts,使用insert命令形式导出数据,这种方式比默认的copy方式慢很多,但是可用于将数据导入到非PostgreSQL数据库。
–column-inserts,导出的数据,有显式列名

2.3 pg_dumpall

相对于pg_dump只能备份单个库,pg_dumpall可以备份整个postgresql实例中所有的数据,包括角色和表空间定义。

示例如下:

pg_dumpall -h 127.0.0.1 -U admin -p 5432 -W –inserts > bak.sql

3、使用pg_restore对数据库进行恢复还原

3.1 pg_restore常用命令

3.1.1导入数据库

pg_restore -U postgres -d testdb flowable_bak_1102.dump >a.txt 2>&1
注意:备份出来的为脚本(纯文本)文件,不能直接使用pg_restore进行恢复。参考:[[使用ps_restore恢复备份数据库出错:pg_restore: input file does not appear to be a valid archive id=605f0e37-c48d-4bab-b57e-2c0ec49b7325]]

3.2 pg_restore常用参数

# pg_restore --help
  -d, --dbname=名字        连接数据库名字
  -f, --file=文件名        输出文件名
  -F, --format=c|d|t       backup file format (should be automatic)
  -l, --list               打印归档文件的 TOC 概述
  -v, --verbose            详细模式
  --help                   显示此帮助信息, 然后退出
  --version                输出版本信息, 然后退出恢复控制选项:
  -a, --data-only          只恢复数据, 不包括模式
  -c, --clean              在重新创建数据库对象之前需要清除(删除)数据库对象
  -C, --create             创建目标数据库
  -e, --exit-on-error      发生错误退出, 默认为继续
  -I, --index=名称         恢复指定名称的索引
  -j, --jobs=NUM           可以执行多个任务并行进行恢复工作
  -L, --use-list=文件名    从这个文件中使用指定的内容表排序输出
  -n, --schema=NAME      在这个模式中只恢复对象
  -O, --no-owner           忽略恢复对象所属者
  -P, --function=名字(参数)  恢复指定名字的函数
  -s, --schema-only        只恢复模式, 不包括数据
  -S, --superuser=NAME     使用指定的超级用户来禁用触发器
  -t, --table=NAME         恢复指定命字的表
  -T, --trigger=NAME       恢复指定命字的触发器
  -x, --no-privileges      跳过处理权限的恢复 (grant/revoke)
  -1, --single-transaction   作为单个事务恢复
 --disable-triggers        在只恢复数据的过程中禁用触发器
  --no-data-for-failed-tables 没有恢复无法创建表的数据
  --no-security-labels     do not restore security labels
--no-tablespaces          不恢复表空间的分配信息
  --use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替ALTER OWNER命令来设置对象所有权
联接选项:
  -h, --host=主机名        数据库服务器的主机名或套接字目录
  -p, --port=端口号        数据库服务器的端口号
  -U, --username=名字      以指定的数据库用户联接
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)
  --role=ROLENAME          在恢复前执行SET ROLE操作

4、常用的备份和还原命令

4.1、使用dump格式备份和恢复:

E:\>pg_dump -U postgres -Fc TestDb1 >TestDb1.dump
postgres=# drop database "TestDb2";

DROP DATABASE

postgres=# create database "TestDb2"

postgres-# with owner="TestRole2"

postgres-# tablespace="TestTbs2";

CREATE DATABASE

E:\>pg_restore -U postgres -d TestDb2 TestDb1.dump >a.txt 2>&1

4.2、使用tar格式备份和恢复:

E:\>pg_dump -U postgres -Ft TestDb1>TestDb1.tar
postgres=# drop database "TestDb2";

DROP DATABASE

postgres=# create database "TestDb2"

postgres-# with owner="TestRole2"

postgres-# tablespace="TestTbs2";

CREATE DATABASE

E:\>pg_restore -U postgres -d TestDb2 TestDb1.tar >a.txt 2>&1