PostgreSQL的pg_filedump工具

news2024/10/6 12:22:51

PostgreSQL的pg_filedump工具

基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777

pg_filedump 是一个工具,用于转储和分析 PostgreSQL 数据文件的内容。它可以显示数据文件的内部结构,包括页头、元组信息,以及数据的物理存储布局。此工具对数据库管理员和开发人员在深入理解数据库的物理存储结构、进行故障排查和性能调优时非常有用。

安装 pg_filedump

pg_filedump 通常作为 PostgreSQL 的附加工具,并不是默认安装的一部分。

1 下载安装包

https://github.com/df7cb/pg_filedump/tags
在这里插入图片描述

2 编译安装
[pg16@test resource]$ unzip pg_filedump-REL_16_0.zip
[pg16@test resource]$ cd pg_filedump-REL_16_0/
[pg16@test pg_filedump-REL_16_0]$ make && make install
3 确认
[pg16@test pg_filedump-REL_16_0]$ pg_filedump

Version 16.0 (for PostgreSQL 8.x .. 16.x)
Copyright (c) 2002-2010 Red Hat, Inc.
Copyright (c) 2011-2023, PostgreSQL Global Development Group

Usage: pg_filedump [-abcdfhikxy] [-R startblock [endblock]] [-D attrlist] [-S blocksize] [-s segsize] [-n segnumber] file

Display formatted contents of a PostgreSQL heap/index/control file
Defaults are: relative addressing, range of the entire file, block
               size as listed on block 0 in the file

The following options are valid for heap and index files:
  -a  Display absolute addresses when formatting (Block header
      information is always block relative)
  -b  Display binary block images within a range (Option will turn
      off all formatting options)
  -d  Display formatted block content dump (Option will turn off
      all other formatting options)
  -D  Decode tuples using given comma separated list of types
      Supported types:
        bigint bigserial bool char charN date float float4 float8 int
        json macaddr name numeric oid real serial smallint smallserial text
        time timestamp timestamptz timetz uuid varchar varcharN xid xml
      ~ ignores all attributes left in a tuple
  -f  Display formatted block content dump along with interpretation
  -h  Display this information
  -i  Display interpreted item details
  -k  Verify block checksums
  -o  Do not dump old values.
  -R  Display specific block ranges within the file (Blocks are
      indexed from 0)
        [startblock]: block to start at
        [endblock]: block to end at
      A startblock without an endblock will format the single block
  -s  Force segment size to [segsize]
  -t  Dump TOAST files
  -v  Ouput additional information about TOAST relations
  -n  Force segment number to [segnumber]
  -S  Force block size to [blocksize]
  -x  Force interpreted formatting of block items as index items
  -y  Force interpreted formatting of block items as heap items

The following options are valid for control files:
  -c  Interpret the file listed as a control file
  -f  Display formatted content dump along with interpretation
  -S  Force block size to [blocksize]
Additional functions:
  -m  Interpret file as pg_filenode.map file and print contents (all
      other options will be ignored)

Report bugs to <pgsql-bugs@postgresql.org>

各个参数:

-a:显示绝对地址。块头信息始终是相对地址。
-b:显示指定范围的二进制块图像(该选项将关闭所有格式选项)。
-d:显示格式化的块内容转储(该选项将关闭所有其他格式选项)。
-D:使用指定的逗号分隔的类型列表解码元组。
-f:显示格式化的块内容转储及解释。
-h:显示帮助信息。
-i:显示解释的项详细信息。
-k:验证块校验和。
-o:不转储旧值。
-R:显示文件中指定的块范围。块从0开始索引。
-s:强制段大小为[segsize]。
-t:转储 TOAST 文件。
-v:输出有关 TOAST 关系的附加信息。
-n:强制段编号为[segnumber]。
-S:强制块大小为[blocksize]。
-x:强制将块项解释为索引项。
-y:强制将块项解释为堆项。
对于控制文件特有的选项:

-c:将文件解释为控制文件。
-m:将文件解释为 pg_filenode.map 文件并打印内容(忽略所有其它选项)。

使用 pg_filedump

下面是一些 pg_filedump 常用的基本用法。

获取数据文件的路径

在使用 pg_filedump 之前,需要获取要分析的表所在的数据文件的路径。可以使用以下 SQL 查询来获取表的文件路径(需要超级用户权限):

white=# SELECT
white-#     pg_relation_filenode(oid), -- 文件节点号,即文件名
white-#     reltablespace,             -- 表空间 OID
white-#     pg_tablespace_location(r.reltablespace) AS tablespace_location -- 表空间路径
white-# FROM
white-#     pg_class r
white-# WHERE
white-#     relname = 't1';
 pg_relation_filenode | reltablespace | tablespace_location 
----------------------+---------------+---------------------
                17040 |             0 | 
(1 row)

white=# SELECT pg_relation_filepath('yewu1.t1');
 pg_relation_filepath 
----------------------
 base/16505/17040
(1 row)
pg_filedump 基本用法

假设我们已经获取到表的文件路径,可以通过以下命令导出数据文件的内容:

[pg16@test bin]$ pg_filedump -i /home/pg16/data/base/16505/17040 

*******************************************************************
* PostgreSQL File/Block Formatted Dump Utility
*
* File: /home/pg16/data/base/16505/17040
* Options used: -i
*******************************************************************

Block    0 ********************************************************
<Header> -----
 Block Offset: 0x00000000         Offsets: Lower     764 (0x02fc)
 Block: Size 8192  Version    4            Upper     832 (0x0340)
 LSN:  logid      0 recoff 0x7e00fce8      Special  8192 (0x2000)
 Items:  185                      Free Space:   68
 Checksum: 0x7062  Prune XID: 0x00000000  Flags: 0x0000 ()
 Length (including item array): 764

<Data> -----
 Item   1 -- Length:   36  Offset: 8152 (0x1fd8)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 0
  Block Id: 0  linp Index: 1   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   2 -- Length:   36  Offset: 8112 (0x1fb0)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 1
  Block Id: 0  linp Index: 2   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   3 -- Length:   36  Offset: 8072 (0x1f88)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 2
  Block Id: 0  linp Index: 3   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   4 -- Length:   36  Offset: 8032 (0x1f60)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 3
  Block Id: 0  linp Index: 4   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   5 -- Length:   36  Offset: 7992 (0x1f38)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 4
  Block Id: 0  linp Index: 5   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   6 -- Length:   36  Offset: 7952 (0x1f10)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 5
  Block Id: 0  linp Index: 6   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   7 -- Length:   36  Offset: 7912 (0x1ee8)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 6
  Block Id: 0  linp Index: 7   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 

 Item   8 -- Length:   36  Offset: 7872 (0x1ec0)  Flags: NORMAL
  XMIN: 268814  XMAX: 0  CID|XVAC: 7
  Block Id: 0  linp Index: 8   Attributes: 2   Size: 24
  infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) 
。。。。。省略。。。。。

查看页信息

要查看包含详细元组信息的页面内容,可以使用以下命令:

[pg16@test bin]$ pg_filedump  -f /home/pg16/data/base/16505/17040 

*******************************************************************
* PostgreSQL File/Block Formatted Dump Utility
*
* File: /home/pg16/data/base/16505/17040
* Options used: -f
*******************************************************************

Block    0 ********************************************************
<Header> -----
 Block Offset: 0x00000000         Offsets: Lower     764 (0x02fc)
 Block: Size 8192  Version    4            Upper     832 (0x0340)
 LSN:  logid      0 recoff 0x7e00fce8      Special  8192 (0x2000)
 Items:  185                      Free Space:   68
 Checksum: 0x7062  Prune XID: 0x00000000  Flags: 0x0000 ()
 Length (including item array): 764

  0000: 00000000 e8fc007e 62700000 fc024003  .......~bp....@.
  0010: 00200420 00000000 d89f4800 b09f4800  . . ......H...H.
  0020: 889f4800 609f4800 389f4800 109f4800  ..H.`.H.8.H...H.
  0030: e89e4800 c09e4800 989e4800 709e4a00  ..H...H...H.p.J.
  0040: 489e4a00 209e4a00 f89d4a00 d09d4a00  H.J. .J...J...J.
  0050: a89d4a00 809d4a00 589d4a00 309d4a00  ..J...J.X.J.0.J.
  0060: 089d4a00 e09c4a00 b89c4a00 909c4a00  ..J...J...J...J.
  0070: 689c4a00 409c4a00 189c4a00 f09b4a00  h.J.@.J...J...J.
。。。。省略。。。。

查看特定行范围的页信息

要仅查看特定block范围的信息,可以指定 -R <start> <end> 选项:

[pg16@test bin]$ pg_filedump -R 1 2 /home/pg16/data/base/16505/17040 

*******************************************************************
* PostgreSQL File/Block Formatted Dump Utility
*
* File: /home/pg16/data/base/16505/17040
* Options used: -R 1 2
*******************************************************************

Block    1 ********************************************************
<Header> -----
 Block Offset: 0x00002000         Offsets: Lower     764 (0x02fc)
 Block: Size 8192  Version    4            Upper     792 (0x0318)
 LSN:  logid      0 recoff 0x7d193370      Special  8192 (0x2000)
 Items:  185                      Free Space:   28
 Checksum: 0x4cb1  Prune XID: 0x00000000  Flags: 0x0004 (ALL_VISIBLE)
 Length (including item array): 764

<Data> -----
 Item   1 -- Length:   38  Offset: 8152 (0x1fd8)  Flags: NORMAL
 Item   2 -- Length:   38  Offset: 8112 (0x1fb0)  Flags: NORMAL
 Item   3 -- Length:   38  Offset: 8072 (0x1f88)  Flags: NORMAL
 Item   4 -- Length:   38  Offset: 8032 (0x1f60)  Flags: NORMAL
 Item   5 -- Length:   38  Offset: 7992 (0x1f38)  Flags: NORMAL
。。。省略。。。
查看真实的数据

通过元组转译查看真实的数据内容,可以帮助我们修复数据。 -D int,text

[pg16@test bin]$ pg_filedump -D int,text /home/pg16/data/base/16505/17040 |more

*******************************************************************
* PostgreSQL File/Block Formatted Dump Utility
*
* File: /home/pg16/data/base/16505/17040
* Options used: -D int,text
*******************************************************************

Block    0 ********************************************************
<Header> -----
 Block Offset: 0x00000000         Offsets: Lower     764 (0x02fc)
 Block: Size 8192  Version    4            Upper     832 (0x0340)
 LSN:  logid      0 recoff 0x7e00fce8      Special  8192 (0x2000)
 Items:  185                      Free Space:   68
 Checksum: 0x7062  Prune XID: 0x00000000  Flags: 0x0000 ()
 Length (including item array): 764

<Data> -----
 Item   1 -- Length:   36  Offset: 8152 (0x1fd8)  Flags: NORMAL
COPY: 1 white 1
 Item   2 -- Length:   36  Offset: 8112 (0x1fb0)  Flags: NORMAL
COPY: 2 white 2
 Item   3 -- Length:   36  Offset: 8072 (0x1f88)  Flags: NORMAL
COPY: 3 white 3
 Item   4 -- Length:   36  Offset: 8032 (0x1f60)  Flags: NORMAL
COPY: 4 white 4
 Item   5 -- Length:   36  Offset: 7992 (0x1f38)  Flags: NORMAL
COPY: 5 white 5
 Item   6 -- Length:   36  Offset: 7952 (0x1f10)  Flags: NORMAL
COPY: 6 white 6
 Item   7 -- Length:   36  Offset: 7912 (0x1ee8)  Flags: NORMAL
COPY: 7 white 7
 Item   8 -- Length:   36  Offset: 7872 (0x1ec0)  Flags: NORMAL
COPY: 8 white 8
 Item   9 -- Length:   36  Offset: 7832 (0x1e98)  Flags: NORMAL
COPY: 9 white 9
 Item  10 -- Length:   37  Offset: 7792 (0x1e70)  Flags: NORMAL
COPY: 10        white 10
。。。省略。。。

注意事项

  • 权限:运行 pg_filedump 需要对 PostgreSQL 数据目录有读取权限。通常需要以 PostgreSQL 服务用户(如 postgres 用户)运行。
  • 性能影响:直接操作数据文件不会影响运行中的 PostgreSQL 实例,但在生产环境中应谨慎执行。
  • 只读操作pg_filedump 是只读工具,不会修改数据文件的内容。

总结

  • pg_filedump 提供了一种方式来直接查看 PostgreSQL 数据文件的内部结构。
  • 通过解析输出,可以深入理解表和索引的存储布局,帮助问题诊断和性能调优。

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

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

相关文章

【docker】运行阶段遇到的问题

目录 1、查询docker 下挂载了哪些工具 2、docker中的简单命令 3、实际场景应用&#xff08;redis&#xff09; 目前工作中仅用到了redis,所以没有太多经验可以交流&#xff0c;暂时仅将我目前遇到的进行发布。还请见谅。 1、查询docker 下挂载了哪些工具 docker ps -a 或者…

10.SQL注入-http header利用案例

SQL注入-http header利用案例 首先通过登录http头界面,如图所示:登录的信息会被记录到数据库中去&#xff0c;同时使用bp进行抓包分析 将抓包的数据发送repeater里面进行调试 通过useragent进行注入 将useragent对应的数据信息删除掉,输入单引号测试被后台执行报错sql语法…

《安富莱嵌入式周报》第339期:单片机运行苹果早期Mac系统模拟器,2GHz示波器有源探头,下一代矩阵开关面包板,卡片式声音分贝器,HP经典示波器,ReRAM

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版 https://www.bilibili.com/video/BV1Kf421Q7Lh 《安富莱嵌入式周报》第339期&#xff1a;单片机运行苹果早期Ma…

Newport太阳光模拟器MSOL-UV-X使用说明手侧

Newport太阳光模拟器MSOL-UV-X使用说明手侧

如何在《中国科学报》报刊上发表论文?

如何在《中国科学报》报刊上发表论文&#xff1f; 《中国科学报》征稿 中国科学院、中国工程院、国家自然科学基金委员会、中国科学技术协会共同主办报纸 【级别】&#xff1a;国家级 【版面】&#xff1a;不指定版面&#xff0c;理论稿件&#xff0c;无广告字眼 【方向】&…

尚品汇-(十一)

&#xff08;1&#xff09;spu保存 这个页面选择了手机之后&#xff0c;会调用查询分类品牌的接口&#xff0c;显示品牌&#xff0c;在分类品牌中添加了两个品牌后也会在这里显示出来 销售属性名称需要查询base_sale_attr表&#xff1a; 实体类&#xff1a;BaseSaleAttr pac…

前端三件套开发模版——产品介绍页面

今天有空&#xff0c;使用前端三件套html、css、js制作了一个非常简单的产品制作页面&#xff0c;与大家分享&#xff0c;希望可以满足大家应急的需求。本页面可以对产品进行“抢购”、对产品进行介绍&#xff0c;同时可以安排一张产品的高清大图&#xff0c;我也加入了页面的背…

Nordic 52832作为HID 键盘连接配对电视/投影后控制没反应问题的分析和解决

问题现象&#xff1a;我们的一款HID键盘硬件一直都工作的很好&#xff0c;连接配对后使用起来和原装键盘效果差不多&#xff0c;但是后面陆续有用户反馈家里的电视等蓝牙设备配对连接我们的键盘后&#xff0c;虽然显示已连接&#xff0c;但实际上控制不了。设备涉及到了好些品牌…

Golang | Leetcode Golang题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; func _rob(nums []int) int {first, second : nums[0], max(nums[0], nums[1])for _, v : range nums[2:] {first, second second, max(firstv, second)}return second }func rob(nums []int) int {n : len(nums)if n 1 {return nums[0]}…

Tekla Structures钢结构详图设计软件下载;Tekla Structures高效、准确的合作平台

Tekla Structures&#xff0c;它不仅集成了先进的三维建模技术&#xff0c;还融入了丰富的工程实践经验&#xff0c;为设计师、工程师和建筑商提供了一个高效、准确的合作平台。 在建筑项目的整个生命周期中&#xff0c;Tekla Structures都发挥着举足轻重的作用。从规划阶段开始…

部署nginx服务用于浏览服务器目录并实现账号密码认证登录

1、背景&#xff1a; 因公司业务需求&#xff0c;部署一套数据库备份中心服务&#xff0c;但是因为备份的数据库很多&#xff0c;有项目经理要求能经常去查看备份数据库情况及下载备份数据文件的需求。根据该需求&#xff0c;需要在备份数据库的服务器上部署一个nginx服务&…

mac中如何恢复因为破解脚本导致的IDEA无法启动的问题

问题 为了在mac中安装免费的2024版idea&#xff0c;导致下载了一个脚本&#xff0c;使用这个脚本后&#xff0c;但是发现idea还没有破解&#xff0c;相反导致idea无法启动&#xff0c;每次点击&#xff0c;都会弹出“cannot start IDE…” 问题排查 在访达中点击mac的应用程…

实时数仓Hologres OLAP场景核心能力介绍

作者&#xff1a;赵红梅 Hologres PD OLAP典型应用场景与痛点 首先介绍典型的OLAP场景以及在这些场景上的核心痛点&#xff0c;OLAP典型应用场景很多&#xff0c;总结有四类&#xff1a;第一类是BI报表分析类&#xff0c;例如BI报表&#xff0c;实时大屏&#xff0c;数据中台等…

java项目总结2

3.了解Java的内存分配 4.重载 定义&#xff1a;在一个类中&#xff0c;有相同名的&#xff0c;但是却是不同参数&#xff08;返回类型可以不一样&#xff09; 重载的优点&#xff1a; 1.减少定义方法时使用的单词 2.减少调用方法时候的麻烦&#xff08;比如sum的返回两个数的…

云计算【第一阶段(22)】Linux的进程和计划任务管理

目录 一、查看进程 1.1、程序和进程的关系 1.2、查看进程 1.2.1、静态查看进程信息ps ​编辑 1.2.1.1、实验 1.2.2、动态查看进程信息top 1.2.2.1、实验 1.2.2.2、top 命令全屏操作界面快捷键 1.2.3、pgrep根据特定条件查询进程pid信息 1.2.4、pstree命令以树形结构列出…

工程安全监测仪器:振弦采集仪的应用与发展

工程安全监测仪器&#xff1a;振弦采集仪的应用与发展 振弦采集仪是一种常见的工程安全监测仪器&#xff0c;广泛应用于建筑、桥梁、隧道、地铁等工程项目中。它通过监测振弦的振动变化&#xff0c;可以及时发现结构变形或损坏情况&#xff0c;为工程的安全运行提供重要数据支…

【前端实现】在父组件中调用公共子组件:注意事项逻辑示例 + 将后端数组数据格式转换为前端对象数组形式 + 增加和删除行

【前端】在父组件中调用公共子组件的实现方法 写在最前面一、调用公共子组件子组件CommonRow.vue父组件ParentComponent.vue 二、实现功能1. 将后端数组数据格式转换为前端对象数组形式2. 增加和删除row 三、小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2…

优化页面加载时间

注&#xff1a;机翻&#xff0c;未校对。 本文年代久远&#xff0c;除了少部分不合时宜的&#xff0c;其他仍有借鉴意义。 Optimizing Page Load Time 优化页面加载时间 It is widely accepted that fast-loading pages improve the user experience. In recent years, many …

数组-螺旋矩阵

M螺旋矩阵 ||&#xff08;leetcode59&#xff09; /*** param {number} n* return {number[][]}*/ var generateMatrix function(n) {const maxNum n * n;let curNum 1;const matrix new Array(n).fill(0).map(() > new Array(n).fill(0));let row 0,column 0;const d…

06 threeJs-gui 界面库

1.引入GUI 如果需要使用lil-gui界面库对页面进行辅助调试和数值设置&#xff0c;则需在项目中进行引入&#xff0c;例如&#xff1a; import { GUI } from ../../build/three/examples/&#xff1b;/libs/lil-gui.module.min.js 2.实例化 交互界面 3.对需要在交互界面显示的数…