PostgreSQL恢复系列:pg_filedump恢复字典构造---惜分飞

pg_filedump是在pg数据库极端情况下直接解析数据库文件的利器,但是由于是开源软件,本身难以实现批量处理,通过对底层基表分析,可以实现批量处理功能
分析PostgreSQL库中数据库信息

--数据库查询结果

postgres=# select oid,datname,datdba,dattablespace from pg_database;

  oid  |   datname   | datdba | dattablespace

-------+-------------+--------+---------------

 14187 | postgres    |     10 |          1663

 16403 | db_xff      |     10 |          1663

     1 | template1   |     10 |          1663

 14186 | template0   |     10 |          1663

 16407 | db_xifenfei |  16405 |         16406

(5 rows)

--通过dump 该文件解析数据

<Data> -----

 Item   1 -- Length:    0  Offset:    5 (0x0005)  Flags: REDIRECT

 Item   2 -- Length:    0  Offset:    6 (0x0006)  Flags: REDIRECT

 Item   3 -- Length:  260  Offset: 7320 (0x1c98)  Flags: NORMAL

COPY: 14187     postgres

 Item   4 -- Length:  260  Offset: 7056 (0x1b90)  Flags: NORMAL

COPY: 16403     db_xff

 Item   5 -- Length:  297  Offset: 7888 (0x1ed0)  Flags: NORMAL

COPY: 1 template1

 Item   6 -- Length:  297  Offset: 7584 (0x1da0)  Flags: NORMAL

COPY: 14186     template0

 Item   7 -- Length:  260  Offset: 6792 (0x1a88)  Flags: NORMAL

COPY: 16407     db_xifenfei

分析PostgreSQL 表空间信息

--sql查询表空间信息

postgres=# select * from pg_tablespace;

  oid  |   spcname    | spcowner | spcacl | spcoptions

-------+--------------+----------+--------+------------

  1663 | pg_default   |       10 |        |

  1664 | pg_global    |       10 |        |

 16406 | tbs_xifenfei |    16405 |        |

(3 rows)

--通过dump 该文件解析数据

<Data> -----

 Item   1 -- Length:   96  Offset: 8096 (0x1fa0)  Flags: NORMAL

COPY: 1663      pg_default

 Item   2 -- Length:   96  Offset: 8000 (0x1f40)  Flags: NORMAL

COPY: 1664      pg_global

 Item   3 -- Length:   96  Offset: 7904 (0x1ee0)  Flags: NORMAL

COPY: 16406     tbs_xifenfei

分析PostgreSQL 对象id、name、path对应关系

--对象信息查询

postgres=# select oid ,relname,relnamespace,reltype,reloftype,relowner,relam,relfilenode,

           reltablespace from pg_class where relname like 't_t%' or relname like 't_x%';

  oid  |  relname   | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace

-------+------------+--------------+---------+-----------+----------+-------+-------------+---------------

 16387 | t_xifenfei |         2200 |   16389 |         0 |       10 |     2 |       16390 |             0

 16391 | t_xff      |         2200 |   16393 |         0 |       10 |     2 |       16391 |             0

 16394 | t_xff2     |         2200 |   16396 |         0 |       10 |     2 |       16394 |             0

 16397 | t_xff3     |         2200 |   16399 |         0 |       10 |     2 |       16397 |             0

 16400 | t_xff4     |         2200 |   16402 |         0 |       10 |     2 |       16400 |             0

 16408 | t_tbs      |         2200 |   16410 |         0 |       10 |     2 |       16408 |         16406

(6 rows)

--通过dump 该文件解析数据(显示部分)

COPY: 16394     t_xff2  2200    16396   0       10      2       16394   0       0       0.000000000000  0       0       f       f       p       r

 Item  29 -- Length:    0  Offset:   31 (0x001f)  Flags: REDIRECT

 Item  30 -- Length:  172  Offset: 2592 (0x0a20)  Flags: NORMAL

COPY: 16397     t_xff3  2200    16399   0       10      2       16397   0       0       0.000000000000  0       0       f       f       p       r

 Item  31 -- Length:  205  Offset: 3376 (0x0d30)  Flags: NORMAL

COPY: 12093     pg_shadow       11      12094   0       10      0       0       0       0       0.000000000000  0       0       f       f       p       v

 Item  32 -- Length:  172  Offset: 2416 (0x0970)  Flags: NORMAL

COPY: 16400     t_xff4  2200    16402   0       10      2       16400   0       0       0.000000000000  0       0       f       f       p       r

这个里面获取到pg_class.reltablespace是表空间的id值,根据自定义表空间的规则:在pgdata/pg_tblspc创建link指向创建表空间时候的文件夹路径

-bash-4.2$ pwd

/var/lib/pgsql/12/data/pg_tblspc

-bash-4.2$ ls -ltr

total 0

lrwxrwxrwx 1 postgres postgres 30 Apr 15 20:13 16406 -> /var/lib/pgsql/12/data/tbs_xff

结合上述的pg_database,pg_tablespace,pg_class信息,可以获取到每个表对应实际的存储路径
分析PostgreSQL 模式信息

--sql查询模式信息

postgres=# select * from pg_namespace;

  oid  |      nspname       | nspowner |               nspacl               

-------+--------------------+----------+-------------------------------------

    99 | pg_toast           |       10 |

 12314 | pg_temp_1          |       10 |

 12315 | pg_toast_temp_1    |       10 |

    11 | pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}

  2200 | public             |       10 | {postgres=UC/postgres,=UC/postgres}

 13887 | information_schema |       10 | {postgres=UC/postgres,=U/postgres}

 16404 | u_xifenfei         |       10 |

(7 rows)

--通过dump 该文件解析数据

<Data> -----

 Item   1 -- Length:    0  Offset:    6 (0x0006)  Flags: REDIRECT

 Item   2 -- Length:   96  Offset: 8096 (0x1fa0)  Flags: NORMAL

COPY: 99        pg_toast

 Item   3 -- Length:    0  Offset:    7 (0x0007)  Flags: REDIRECT

 Item   4 -- Length:   96  Offset: 8000 (0x1f40)  Flags: NORMAL

COPY: 12314     pg_temp_1

 Item   5 -- Length:   96  Offset: 7904 (0x1ee0)  Flags: NORMAL

COPY: 12315     pg_toast_temp_1

 Item   6 -- Length:  141  Offset: 7760 (0x1e50)  Flags: NORMAL

COPY: 11        pg_catalog

 Item   7 -- Length:  141  Offset: 7616 (0x1dc0)  Flags: NORMAL

COPY: 2200      public

 Item   8 -- Length:    0  Offset:    9 (0x0009)  Flags: REDIRECT

 Item   9 -- Length:  141  Offset: 7472 (0x1d30)  Flags: NORMAL

COPY: 13887     information_schema

 Item  10 -- Length:   96  Offset: 7376 (0x1cd0)  Flags: NORMAL

COPY: 16404     u_xifenfei

通过pg_namespace,pg_class信息,可以获取到对象所属的模式关系,基于上述汇总,可以获取到某个模式下面,所有表id和实际存储路径,现在使用pg_filedump进行恢复,还缺少表的列类型信息,通过pg_type和pg_attribute来获取。

获取PostgreSQL表的列名称和类型[编号]信息

--sql查询列信息

postgres=# \d t_tbs

               Table "public.t_tbs"

  Column  | Type | Collation | Nullable | Default

----------+------+-----------+----------+---------

 oid      | oid  |           |          |

 spcname  | name |           |          |

 spcowner | oid  |           |          |

Tablespace: "tbs_xifenfei"

postgres=# select attrelid,attname,atttypid,attstattarget,attlen,attnum from pg_attribute where attrelid=16408;

 attrelid | attname  | atttypid | attstattarget | attlen | attnum

----------+----------+----------+---------------+--------+--------

    16408 | tableoid |       26 |             0 |      4 |     -6

    16408 | cmax     |       29 |             0 |      4 |     -5

    16408 | xmax     |       28 |             0 |      4 |     -4

    16408 | cmin     |       29 |             0 |      4 |     -3

    16408 | xmin     |       28 |             0 |      4 |     -2

    16408 | ctid     |       27 |             0 |      6 |     -1

    16408 | oid      |       26 |            -1 |      4 |      1

    16408 | spcname  |       19 |            -1 |     64 |      2

    16408 | spcowner |       26 |            -1 |      4 |      3

(9 rows)

--dump 内容(截取部分)

 Item  11 -- Length:  144  Offset: 1424 (0x0590)  Flags: NORMAL

COPY: 16408     oid     26      -1      4       1

 Item  12 -- Length:  144  Offset: 1280 (0x0500)  Flags: NORMAL

COPY: 16408     spcname 19      -1      64      2

 Item  13 -- Length:  144  Offset: 1136 (0x0470)  Flags: NORMAL

COPY: 16408     spcowner        26      -1      4       3

 Item  14 -- Length:  144  Offset:  992 (0x03e0)  Flags: NORMAL

COPY: 16408     ctid    27      0       6       -1

 Item  15 -- Length:  144  Offset:  848 (0x0350)  Flags: NORMAL

COPY: 16408     xmin    28      0       4       -2

 Item  16 -- Length:  144  Offset:  704 (0x02c0)  Flags: NORMAL

COPY: 16408     cmin    29      0       4       -3

 Item  17 -- Length:  144  Offset:  560 (0x0230)  Flags: NORMAL

COPY: 16408     xmax    28      0       4       -4

 Item  18 -- Length:  144  Offset:  416 (0x01a0)  Flags: NORMAL

COPY: 16408     cmax    29      0       4       -5

PostgreSQL获取类型编号和实际类型名称对应关系

--查询类型编号和实际类型关系

postgres=# select oid,typname from pg_type;

  oid  |                typname               

-------+---------------------------------------

    16 | bool

    17 | bytea

    18 | char

    19 | name

    20 | int8

    21 | int2

    22 | int2vector

    23 | int4

    24 | regproc

    25 | text

    26 | oid

    27 | tid

    28 | xid

    29 | cid

……

--dump 内容(截取部分)

 Item   1 -- Length:  176  Offset: 8016 (0x1f50)  Flags: NORMAL

COPY: 16        bool

 Item   2 -- Length:  176  Offset: 7840 (0x1ea0)  Flags: NORMAL

COPY: 17        bytea

 Item   3 -- Length:  176  Offset: 7664 (0x1df0)  Flags: NORMAL

COPY: 18        char

 Item   4 -- Length:  176  Offset: 7488 (0x1d40)  Flags: NORMAL

COPY: 19        name

 Item   5 -- Length:  176  Offset: 7312 (0x1c90)  Flags: NORMAL

COPY: 20        int8

 Item   6 -- Length:  176  Offset: 7136 (0x1be0)  Flags: NORMAL

COPY: 21        int2

 Item   7 -- Length:  176  Offset: 6960 (0x1b30)  Flags: NORMAL

COPY: 22        int2vector

 Item   8 -- Length:  176  Offset: 6784 (0x1a80)  Flags: NORMAL

COPY: 23        int4

 Item   9 -- Length:  176  Offset: 6608 (0x19d0)  Flags: NORMAL

COPY: 24        regproc

 Item  10 -- Length:  176  Offset: 6432 (0x1920)  Flags: NORMAL

COPY: 25        text

 Item  11 -- Length:  176  Offset: 6256 (0x1870)  Flags: NORMAL

COPY: 26        oid

 Item  12 -- Length:  176  Offset: 6080 (0x17c0)  Flags: NORMAL

COPY: 27        tid

 Item  13 -- Length:  176  Offset: 5904 (0x1710)  Flags: NORMAL

COPY: 28        xid

 Item  14 -- Length:  176  Offset: 5728 (0x1660)  Flags: NORMAL

COPY: 29        cid

 Item  15 -- Length:  176  Offset: 5552 (0x15b0)  Flags: NORMAL

COPY: 30        oidvector

通过pg_class、pg_type和pg_attribute可以获取对象的表的列名称,数据类型等信息。通过以上几个对象,即可获取到pg_filedmp处理所需要的所有信息,然后可以实现批量处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拖拽式工作流有哪几个优势?

在信息技术迅猛发展的今天&#xff0c;如何助力中小型企业在数字化转型的过程中平稳过渡&#xff1f;又是如何让中小型企业摆脱数据孤岛、成本投入高等各种瓶颈和难题&#xff1f;低代码技术平台是近些年较为理想的平台产品&#xff0c;其中拖拽式工作流优势特点突出&#xff0…

地埋电缆故障检测方法有哪些?地埋电缆故障检测费用是多少?

地埋电缆故障检测方法主要涵盖脉冲反射法、桥接法、高压闪络法和声波定位法等多种方法。选择适当的方法取决于故障类型、电缆类型和实际现场条件。至于地埋电缆故障检测费用则受到多个因素的影响&#xff0c;包括故障类型、检测方法的复杂性、检测设备的先进程度以及所处地区的…

从零开始搭建社交圈子系统:充实人脉的最佳路径

线上交友圈&#xff1a;拓展社交网络的新时代 线上交友圈是社交网络的新引擎&#xff0c;提供了更广泛的社交机会&#xff0c;注重共同兴趣的连接&#xff0c;强调多样性的社交形式&#xff0c;更真实地展示自己&#xff0c;让朋友更全面地了解我们的生活状态。虽然虚拟交往存在…

SD-WAN解决电商企业海外业务网络难题

全球化背景下&#xff0c;众多国内企业都涉及到海外贸易业务&#xff0c;尤其是出海电商得到蓬勃发展。企业做出海电商&#xff0c;需要访问国外网页、社交平台&#xff0c;如亚马逊、TikTok、Facebook、YouTube等与客户沟通互动&#xff0c;SD-WAN的发展正好为解决国际网络访问…

14 Php学习:表单

表单 PHP 表单是用于收集用户输入的工具&#xff0c;通常用于网站开发。PHP 可以与 HTML 表单一起使用&#xff0c;用于处理用户提交的数据。通过 PHP 表单&#xff0c;您可以创建各种类型的表单&#xff0c;包括文本输入框、复选框、下拉菜单等&#xff0c;以便用户可以填写和…

主存储器与CPU之间的连接(会画图)

位扩展 字扩展 由于只有A13&#xff0c; A14 连到了译码器上&#xff0c;以、因此该译码器是一个 2/4 译码器&#xff0c;对应的选片有四种。选中第一个选片&#xff0c;就是把译码器“0口置0&#xff0c; 1~3口置1”&#xff0c;因为CS有非号&#xff0c;因此&#xff0c;低电…

【C++】string的使用

目录 1、为什么学习string类&#xff1f; 2、标准库中的string类 2.1 string类 2.2 string类的常见接口声明 2.2.1 string类的常见构造 ​编辑 2.2.2 string类对象的访问及遍历操作 2.2.3 string类对象的容量操作 2.2.4 string类对象的修改操作 ​编辑 1、为什么学习s…

excel中vlookup查找值必须在table_array的第一列,有其他办法吗有XLOOKUP

vlookup查找值必须在table_array的第一列&#xff0c;有其他办法吗&#xff1f;有XLOOKUP。 vlookup 查找如下&#xff0c;查找值必须在table_array的第一列 如果下面&#xff0c;编码和名称交换位置&#xff0c;就不能使用vlookup查找了。 XLOOKUP 查找如下

Linux:进程调度

Linux&#xff1a;进程调度 进程优先级查看优先级调整优先级 Linux 2.6 内核进程调度队列 进程优先级 查看优先级 在Linux中&#xff0c;进程是有优先级的&#xff0c;我们可以通过指令ps -la来查看&#xff1a; 其中PRI表示priority优先级&#xff0c;在Linux中&#xff0c;…

解决 vue install 引发的 failed Error: not found: python2 问题

发生 install 异常时&#xff0c;提示信息如下所示&#xff1a; npm ERR! code 1 npm ERR! path U:\cnblogs\fanfengping-dtops\fanfengping-dtops-front\node_modules\node-sass npm ERR! command failed npm ERR! command U:\Windows\system32\cmd.exe /d /s /c node scripts…

基于Matlab机器人工具箱对Dobot机械臂的研究

文章目录 文章目录 前言 一、Dobot Mangician 分析 二、Matlab 机器人工具箱 1. 建立模型 2. DoBot 正向运动学 3. Dobot 逆运动学 4. Dobot workpace 5. Dobot轨迹规划 三、Dobot studio 1. DoBot teaching 2. DoBot Python 程序 总结 前言 在本实验中&#xf…

智能边缘计算采集网关助您远程调试SINAMICS S200伺服-天拓四方

您还在为每次调试都要去现场而烦恼吗&#xff1f;智能边缘计算采集网关助您远程调试SINAMICS S200伺服&#xff0c;让您足不出户&#xff0c;就能“运筹帷幄之中&#xff0c;决胜千里之外”。 新品介绍 SINAMICS S200 PN是西门子推出的新一代伺服驱动系统&#xff0c;采用Mot…

upload-labs第十一十二关

第十一关 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES[upload_fil…

博客文章:AWS re:Invent 2023 新产品深度解析 - 第四部分

TOC &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&#xff01; 写在最前面 去年发布文章的一部分&#xff0c;由于内…

【5】DongshanPI-Seven 应用开发_网络编程TCPUDP

目录 1、网络编程概念2、网络编程的API2.1 网络通信交互示意图2.2 主要API 3、编程测试3.1 TCP 测试3.1.1 server 程序3.1.2 Client 程序3.1.3 测试结果 3.2 UDP 测试3.2.1 udp server3.2.2 udp client3.2.3 测试结果 1、网络编程概念 1.数据传输三要素&#xff1a;源、目的、…

网络的坚实与灵活:工业与常规以太网交换机的差异解析

&#x1f310;&#x1f310;在当今互联网和物联网迅速发展的背景下&#xff0c;以太网交换机作为网络通信的核心设备&#xff0c;其性能和稳定性对于整个网络系统的运行至关重要。工业以太网交换机和常规以太网交换机乍一看似乎很相似&#xff0c;但两者之间存在着一些关键区别…

深入探索:Zookeeper+消息队列(kafka)集群

目录 前言 一、Zookeeper概述 1、Zookeeper概念 2、Zookeeper 特点 3、Zookeeper工作机制 4、Zookeeper 选举机制 4.1 第一次启动选举机制 4.2 非第一次启动选举机制 5、Zookeeper 数据结构 6、Zookeeper 应用场景 二、部署 Zookeeper 集群 1、环境部署 2、安装 z…

OpenHarmony音频和音乐编码格式—vorbis

简介 一种通用音频和音乐编码格式。 Vorbis编解码器规范属于公共领域。所有技术细节都已发布并记录&#xff0c;任何软件实体都可以充分利用该格式&#xff0c;而无需支付许可费、版税或专利问题。 下载安装 直接在OpenHarmony-SIG仓中搜索vorbis并下载。 使用说明 以OpenHa…

测试JAVA 测开

测试、java测开 1、测试用例要素&#xff08;4个重要要素&#xff09;2、测试用例的好处3、测试用例的设计方法3.1 基于需求设计测试用例3.2 等价类3.3 边界值3.4 判定表 1、测试用例要素&#xff08;4个重要要素&#xff09; 测试环境操作步骤测试数据预期结果 2、测试用例的…

企业数字化与数智化的区别是什么?

一、引言 随着信息技术的迅猛发展和应用普及&#xff0c;企业面临着数字化与数智化两大转型趋势。数字化主要关注数据的收集、整合和流程优化&#xff0c;而数智化则在此基础上进一步引入智能技术&#xff0c;实现业务的自动化、智能化和决策的科学化。探讨企业数字化与数智化…