PostgreSQL的pg_filedump工具

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 数据文件的内部结构。
  • 通过解析输出,可以深入理解表和索引的存储布局,帮助问题诊断和性能调优。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu运行qq音乐闪退

ubuntu运行qq音乐闪退 修改/usr/share/applications中的qqmusic.desktop&#xff0c;在Exec后加上 --no-sandbox,如下图所示&#xff1a; 该文件有可能是只读&#xff0c;权限不够的话用sudo vim qqmusic.desktop

PyCharm远程开发

PyCharm远程开发 1- 远程环境说明 每个人的本地电脑环境差别很大。各自在自己电脑上开发功能&#xff0c;测试/运行正常。但是将多个人的代码功能合并&#xff0c;运行服务器上&#xff0c;会出现各种版本兼容性问题。 在实际企业中&#xff0c;一般会有两套环境。第一套是测…

离子液体(ILs)在电化学领域应用前景广阔 海外企业占据全球市场主导地位

离子液体&#xff08;ILs&#xff09;在电化学领域应用前景广阔 海外企业占据全球市场主导地位 离子液体&#xff08;ILs&#xff09;又称离子性液体&#xff0c;指在室温或接近室温条件下&#xff0c;完全由阴阳离子组成的液态盐。与传统有机溶剂相比&#xff0c;离子液体具有…

短视频电商源码的优势及软件架构解析

短视频电商源码是目前电商行业中非常火热的一个新兴领域&#xff0c;它通过短视频内容和电商商品的结合&#xff0c;为用户提供了一种新的购物体验。下面将介绍短视频电商源码的优势以及软件架构。 首先&#xff0c;短视频电商源码具有以下几个优势&#xff1a; 1、创新的购物体…

观众为何偏爱采用多媒体互动技术的博物馆展览?

昔日踏入博物馆&#xff0c;映入眼帘的尽是静谧的展柜与沉默不语的展品&#xff0c;它们静静地诉说着过往的故事&#xff0c;却与参观者之间隔着一道无形的墙。但如今&#xff0c;想象力跨越了界限&#xff0c;多媒体互动技术如同魔法般降临&#xff0c;赋予这些历史遗珍以新的…

进程以及多线程编程

文章目录 什么是进程/任务&#xff08;Process/Task&#xff09;进程控制块抽象(PCB Process Control Block)PID(进程的 id /标识符)内存指针文件描述符表状态优先级上下文记账信息 线程(Thread)进程和线程的区别线程的优点: 多线程代码代码示例(继承Thread类的方式)sleep(休眠…

k8s部署单机版xxl-job

一、初始化数据库 https://github.com/xuxueli/xxl-job/blob/2.3.1/doc/db/tables_xxl_job.sql # # XXL-JOB v2.3.1 # Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS xxl_job default character set utf8mb4 collate utf8mb4_unicode_ci; use xxl_job;…

数据库安全:MySQL权限体系划分与实战操作

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

第7章 Redis的噩梦:阻塞

文章目录 前言1 发现阻塞2.内在原因2.1API或数据结构使用不合理2.1.1如何发现慢查询2.1.2.如何发现大对象 2.2 CPU饱和2.3 持久化阻塞2.3.1fork阻塞2.3.2.AOF刷盘阻塞2.3.3.HugePage写操作阻塞 3 外在原因3.1CPU竞争3.2 内存交换3.3网络问题3.3.1连接拒绝 前言 Redis是典型的单…

【Altium】AD-PCB界面抬头显示设置

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 PCB设计界面中抬头显示设置的方法 2、 问题场景 PCB设计界面中左上角有一个抬头显示悬浮窗口&#xff0c;这个窗口可以显示坐标&#xff0c;选中PCB中某个对象后还能显示它的具体信息。有用户不喜欢这个窗口&#x…

漆包线行业生产管理革新:万界星空科技MES系统解决方案

一、引言 在科技日新月异的今天&#xff0c;万界星空科技凭借其在智能制造领域的深厚积累&#xff0c;为漆包线行业量身打造了一套先进的生产管理执行系统&#xff08;MES&#xff09;解决方案。随着市场竞争的加剧&#xff0c;漆包线作为电气设备的核心材料&#xff0c;其生产…

Android手机删除的照片怎么找回来?3个详细教程,有效恢复

在这个充满科技魅力的时代&#xff0c;手机它不仅是我们的通讯工具&#xff0c;更是我们的娱乐中心、信息库和摄影工作室。然而&#xff0c;有时候&#xff0c;我们在享受科技带来的便利的同时&#xff0c;也会遭遇一些小小的困扰。 比如&#xff0c;你可能会在一次手抖中删除…

AI需求强劲推动韩国六月芯片出口创历史新高

据路透社7月1日报道&#xff0c;韩国产业通商资源部最新数据显示&#xff0c;韩国出口连续第九个月增长&#xff0c;六月份海外对芯片的持续且增强的需求将芯片出口额推至历史高位。这一出口增长势头同时带动韩国制造业采购经理指数&#xff08;PMI&#xff09;攀升至两年多以来…

《Linux开发笔记》C语言编译

C语言编译过程 编译过程主要分为四步&#xff1a;预处理、编译、汇编、链接 预处理&#xff1a;主要用于查找头文件、展开宏 编译&#xff1a;把.i文件编译成.s文件 汇编&#xff1a;把.s文件汇编为.o文件 链接&#xff1a;把多个.o文件链接成一个app 以上四个步骤主要由3个命…

java 程序、进程 、线程,cpu,并行、并发、启动线程两种方式

1、重写 Thread 父类方法 后创建实例调用 start 方法 2、将创建自实现 Runable 接口后的实例 作为参数传递给 Thread 的构造方法 两个条件同时存在&#xff0c;那个生效&#xff1f; new Thread(/* condition 1 */threadTest2) {Override/* condition 2 */public void run() {T…

【计算机毕业设计】基于Springboot的大学生就业招聘系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

绝区零 Mac 下载安装详细教程(MacOS IPA 砸壳包 playCover 完美运行)

绝区零 7.4 号开始公测&#xff0c;但刚刚就可以开始下载了&#xff0c;我也是第一时间就迫不及待的安装到了我的 Mac 电脑上&#xff0c;感兴趣的朋友可以跟我一起安装试试 我这里是通过 playCover 的形式在 Mac 上安装运行的&#xff0c;根据之前原神的经验所以这次还是同样…

CTFHUB-SSRF-Redis协议

本题需要用到&#xff1a; 在线编码网址&#xff1a;https://icyberchef.com/ gopherus工具&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139440201 开启题目&#xff0c;页面空白 和上一个题FastCGI协议一样&#xff0c;还是使用gopherus攻击redis ./gopheru…

H616连接摄像头

&#xff08;1&#xff09;首先将USB摄像头连接到OrangePi开发板的USB接口 &#xff08;2&#xff09;通过lsmod命令查看是否加载了uvcvideo模块 lsmod | grep video &#xff08;3&#xff09;通过 v4l2-ctl 命令可以看到 USB 摄像头的设备节点信息为/dev/video0 sudo apt u…

数字化精益生产系统--SRM供应商关系管理

SRM供应商关系管理&#xff0c;全称为Supplier Relationship Management&#xff08;供应商关系管理&#xff09;系统&#xff0c;是一种专门用于管理采购供应链和供应商关系的软件系统。该系统通过集成各个环节的采购活动&#xff0c;帮助企业实现采购流程的自动化、标准化和优…