PG备份恢复--pg_dump

embedded/2024/12/29 3:46:19/

pg_dump

pg_dump 是一个逻辑备份工具。使用 pg_dump 可以在数据库处于使用状态下进行一致
性的备份,它不会阻塞其他用户对数据库的访问 。

一致性备份是 pg_dump 开始运行时,给数据库打了一个快照,且在 pg_dump 运行过程
中发生的更新将不会被备份。

pg_dump 只备份单个数据库,不能备份数据库公共的全局对象(例如角色和表空间)

创建一个database mydb ,在mydb下创建一个表t1

mydb=# create table t1(id serial,info text);
CREATE TABLE
mydb=# create index on t1(id);
CREATE INDEX
mydb=# insert into t1 values(generate_series(1,10000));
INSERT 0 10000
mydb=# \1
invalid command \1
Try \? for help.
mydb=# \q

pg_dump常用参数

-h host,指定数据库主机名,或者 IP
-p port,指定端口号
-U user,指定连接使用的用户名
-W,按提示输入密码
dbname,指定连接的数据库名称,实际上也是要备份的数据库名称。
-f,–file:输出到指定文件中
-F,–format=c|d|t|p:
c 为自定义格式,也是二进制格式,压缩存储,只能使用 pg_restore 来还原, 可
以指定还原的表, 编辑 TOC 文件, 定制还原的顺序, 表, 索引等。
d 为目录
t 表示输出为 tar 包
p 为纯文本 SQL,大库不推荐;
-j,–jobs=num:指定并行导出的并行度
-a,–data-only:只导出数据,不导出表结构
-c,–clean:是否生成清理该数据库对象的语句,比如 drop table
-C,–create:是否输出一条创建数据库语句
-n,–schema:只转存匹配 schema 的模式内容
-N,–exclude-scheam:不转存匹配 schema 的模式内容
-O,–no-owner,不设置导出对象的所有权
-s,–schema-only:只导致对象定义模式,不导出数据
-t,–table:只转存匹配到的表,视图,序列,可以使用多个-t 匹配多个表
-T,–exclude-table:不转存匹配到的表。
–inserts:使用 insert 命令形式导出数据,这种方式比默认的 copy 方式慢很多,但是可
用于将数据导入到非 PostgreSQL 数据库
–column-inserts:导出的数据,有显式列名

备份

(1)导出sql语句


一个insert插一行
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W --insert mydb >mydb.sql一次插入2行
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W --insert  --rows-per-insert=2 mydb  >mydb2.sql

(2)导出文件

-- 要转储一个数据库到一个自定义格式归档文件
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W  -Fc mydb  >mydb.dump--使用 5 个并行任务转储一个数据库到一个目录格式的归档 
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W  -Fd -j 5 mydb  -f mydbdir 

(3)用法举例

-- 备份单个表 
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W testdb -t t1 --inserts > testdb.sql -- 备份多个表 
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W testdb -t t1 -t t2 --inserts > 
testdb.sql-- 如果只想备份 schema 模式中所有以 t 开头的表,但是不包括 t1 表 
pg_dump -t "public.t*" -T public.t1 testdb > testdb.sql -- 转储所有 testdb 的数据库对象,但是不包含以 1 结尾的表 
pg_dump -T '*1' testdb > testdb.sql -- 转储 testdb 中 public 和 test 这两个 schema 中的内容 
pg_dump -Fc -n public -n test testdb -f testdb.dump -- 转储 testdb 中除了 public schema 中的数据以外的所有数据 
pg_dump -Fc -N public testdb -f testdb.dump--只备份数据
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W testdb --inserts -a > testdb.sql--只备份表结构
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W testdb -s > testdb.sql

恢复


--恢复一个文本文档 
psql mydb <mydb.sql-- 要把一个归档文件重新载入到一个(新创建的)名为 newdb 的数据库: 
pg_restore -d newdb mydb.dump -- 把一个归档文件重新装载到同一个数据库(该归档正是从这个数据库中转储得来)中,
丢掉那个数据库中的当前内容 
pg_restore -d newdb --clean mydb.dump-- 备份后直接进行恢复,文件不落地 
pg_dump testdb| psql newdb -- 并行备份恢复 
pg_dump -Fd -j4 testdb -f dumpdir 
pg_restore -d newdb -j4 dumpdir

利用toc文件选择性恢复


-- 根据二进制备份文件生成 toc 文件 
方式一:pg_restore -l mydb.dump > mydb.toc 
方式二:pg_restore -l -f mydb.toc mydb.dump 
以上两种方式相同效果
-- 修改 toc 文件,用‘;’号注释掉不用还原的内容: 
-- 以 toc 文件列表做恢复 
pg_restore -Fc  -d mydb mydb.dump -L mydb.toc
-- 检查发现 t1 表没有被导入。--只恢复t1表
pg_dump -Fc -d mydb  -f mydb.dmp
pg_restore -l mydb.dmp |grep t1 >mydbt1.dmp
pg_restore -d mydb  mydb.dmp -L mydbt1.dmp

压缩备份

-- 导出并且压缩 
pg_dump testdb -f testdb.sql | gzip testdb.sql 
-- 解压并且导入,压缩文件不变: 
gunzip -c testdb.sql.gz | psql testdb -- 分割备份 
pg_dump testdb | split -b 1m 
-- 恢复 
cat filename* | psql dbname

大表备份


可以使用 -j 选项来指定执行 pg_dump 和 pg_restore 时要使用的线程数。 
可以使用目录格式 (-Fd),它会提供压缩转储(使用 gzip)。使用 -Fd 选项可以提供超过
5 倍的压缩。对于较大的数据库(例如超过 1 TB),压缩转储可以减少磁盘 IOPS。示例:pg_dump -Fd testdb -j 5 -f dump_dir pg_restore -d newdb -j 5 dump_dir

http://www.ppmy.cn/embedded/149249.html

相关文章

pnpm、Yarn 和 npm 的区别?

pnpm、Yarn 和 npm 都是 JavaScript 生态系统中流行的包管理工具&#xff0c;但它们在设计理念、性能特点和功能上存在一些差异。以下是这三种工具的主要区别&#xff1a; 1. 安装机制 npm&#xff1a; 使用扁平化的 node_modules 结构&#xff08;从版本 3 开始&#xff09;&…

《Opencv》基础操作详解(1)

目录 一、Opencv简介 OpenCV 的主要特点 二、Opencv库安装 1、opencv-python库安装 2、opencv-contrib-python库安装 三、Opencv 基础操作 1、opencv库的导入 2、读取、展示图片 3、查看图片信息 4、控制图片显示时间、关闭窗口 5、读取灰度图 6、彩色图片转灰度图 …

小程序canvas画环形百分比进度图

组件封装 component/canvas-ring目录下 canvas-ring.js <canvas style"width:{{canvasWidth}}px;height:{{canvasWidth}}px; margin:0 auto;position:relative" type"2d" id"myCanvas"><view class"circle-bar" style&quo…

Element分阶段逐步升级

这里写目录标题 1. 模块划分策略2. 模块化升级的步骤3. 示例&#xff1a;表单模块分阶段升级4. 整体项目的分阶段规划 1. 模块划分策略 在分模块升级之前&#xff0c;必须对项目进行模块化分析。模块可以按以下几种方式划分&#xff1a; 按功能划分 将项目划分为不同的业务模…

Ubuntu下通过Docker部署NGINX服务器

Yo! 大家好&#xff0c;Hitch在此带来一篇关于在Ubuntu下通过Docker部署NGINX服务器的技术博客。废话不多说&#xff0c;让我们直奔主题&#xff01; Docker和NGINX简介 Docker是一个开源的容器化平台&#xff0c;可以轻松创建、部署和运行应用程序。NGINX是一个高性能的Web服…

Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍

前文指路&#xff1a;《Vue零基础教程》&#xff0c;从前端框架到GIS开发系列课程 Vue零基础教程|从前端框架到GIS开发系列课程&#xff08;二&#xff09; Vue零基础教程|从前端框架到GIS开发系列课程&#xff08;三&#xff09;模板语法 Vue零基础教程|从前端框架到GIS开发…

攻防世界 PHP2

开启场景 访问 /index.php&#xff0c;页面无变化 访问 /index.phps index.php 和 index.phps 文件之间的主要区别在于它们的文件扩展名。 index.php&#xff1a;这是一个标准的 PHP 文件&#xff0c;通常用于编写 PHP 代码。当用户访问 index.php 文件时&#xff0c;Web 服务器…

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV

目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH &#xff08;1&#xff09;w25flash.h &#xff08;2&#xff09; w25flash.c 1&#xff09;W25Q16基本操作指令 2&#xff09;计算地址的辅助功能函数 3&#xff09;器…