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_filedumpVersion 16.0 (for PostgreSQL 8.x .. 16.x)
Copyright (c) 2002-2010 Red Hat, Inc.
Copyright (c) 2011-2023, PostgreSQL Global Development GroupUsage: pg_filedump [-abcdfhikxy] [-R startblock [endblock]] [-D attrlist] [-S blocksize] [-s segsize] [-n segnumber] fileDisplay formatted contents of a PostgreSQL heap/index/control file
Defaults are: relative addressing, range of the entire file, blocksize as listed on block 0 in the fileThe following options are valid for heap and index files:-a  Display absolute addresses when formatting (Block headerinformation is always block relative)-b  Display binary block images within a range (Option will turnoff all formatting options)-d  Display formatted block content dump (Option will turn offall other formatting options)-D  Decode tuples using given comma separated list of typesSupported types:bigint bigserial bool char charN date float float4 float8 intjson macaddr name numeric oid real serial smallint smallserial texttime 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 areindexed from 0)[startblock]: block to start at[endblock]: block to end atA 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 itemsThe 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 (allother 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:   68Checksum: 0x7062  Prune XID: 0x00000000  Flags: 0x0000 ()Length (including item array): 764<Data> -----Item   1 -- Length:   36  Offset: 8152 (0x1fd8)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 0Block Id: 0  linp Index: 1   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   2 -- Length:   36  Offset: 8112 (0x1fb0)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 1Block Id: 0  linp Index: 2   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   3 -- Length:   36  Offset: 8072 (0x1f88)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 2Block Id: 0  linp Index: 3   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   4 -- Length:   36  Offset: 8032 (0x1f60)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 3Block Id: 0  linp Index: 4   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   5 -- Length:   36  Offset: 7992 (0x1f38)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 4Block Id: 0  linp Index: 5   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   6 -- Length:   36  Offset: 7952 (0x1f10)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 5Block Id: 0  linp Index: 6   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   7 -- Length:   36  Offset: 7912 (0x1ee8)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 6Block Id: 0  linp Index: 7   Attributes: 2   Size: 24infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) Item   8 -- Length:   36  Offset: 7872 (0x1ec0)  Flags: NORMALXMIN: 268814  XMAX: 0  CID|XVAC: 7Block Id: 0  linp Index: 8   Attributes: 2   Size: 24infomask: 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:   68Checksum: 0x7062  Prune XID: 0x00000000  Flags: 0x0000 ()Length (including item array): 7640000: 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:   28Checksum: 0x4cb1  Prune XID: 0x00000000  Flags: 0x0004 (ALL_VISIBLE)Length (including item array): 764<Data> -----Item   1 -- Length:   38  Offset: 8152 (0x1fd8)  Flags: NORMALItem   2 -- Length:   38  Offset: 8112 (0x1fb0)  Flags: NORMALItem   3 -- Length:   38  Offset: 8072 (0x1f88)  Flags: NORMALItem   4 -- Length:   38  Offset: 8032 (0x1f60)  Flags: NORMALItem   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:   68Checksum: 0x7062  Prune XID: 0x00000000  Flags: 0x0000 ()Length (including item array): 764<Data> -----Item   1 -- Length:   36  Offset: 8152 (0x1fd8)  Flags: NORMAL
COPY: 1 white 1Item   2 -- Length:   36  Offset: 8112 (0x1fb0)  Flags: NORMAL
COPY: 2 white 2Item   3 -- Length:   36  Offset: 8072 (0x1f88)  Flags: NORMAL
COPY: 3 white 3Item   4 -- Length:   36  Offset: 8032 (0x1f60)  Flags: NORMAL
COPY: 4 white 4Item   5 -- Length:   36  Offset: 7992 (0x1f38)  Flags: NORMAL
COPY: 5 white 5Item   6 -- Length:   36  Offset: 7952 (0x1f10)  Flags: NORMAL
COPY: 6 white 6Item   7 -- Length:   36  Offset: 7912 (0x1ee8)  Flags: NORMAL
COPY: 7 white 7Item   8 -- Length:   36  Offset: 7872 (0x1ec0)  Flags: NORMAL
COPY: 8 white 8Item   9 -- Length:   36  Offset: 7832 (0x1e98)  Flags: NORMAL
COPY: 9 white 9Item  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.mzph.cn/pingmian/40276.shtml

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

相关文章

JAVA小知识30:JAVA多线程篇1,认识多线程与线程安全问题以及解决方案。(万字解析)

来 多线程&#xff0c;一个学起来挺难但是实际应用不难的一个知识点&#xff0c;甚至在很多情况下都不需要考虑&#xff0c;最多就是写测试类的时候模拟一下并发&#xff0c;现在我们就来讲讲基础的多线程知识。 一、线程和进程、并发与并行 1.1、线程和进程 线程&am…

Java学习十二—Java8特性之Optional类

一、简介 Java 8 引入了 Optional​ 类作为一种容器&#xff0c;可以用来显式地表示一个值存在或不存在。它解决了传统上可能会遇到的空指针异常问题&#xff0c;同时提供了一种更优雅的方式来处理可能为null的情况。 Java 8 中引入 Optional​ 类的背景可以从以下几个方面来理…

线程池概念的详解

前言&#x1f440;~ 上一章我们介绍了什么是定时器以及如何去实现一个定时器&#xff0c;今天我们来讲解在多线程中同样很重要的一个内容线程池 线程池的出现 线程池概念 标准库中的线程池 工厂模式 newCacheThreadPool方法 newFixedThreadPool方法 ThreadPoolExecutor…

Akamai+Noname强强联合 | API安全再加强

最近&#xff0c;Akamai正式完成了对Noname Security的收购。本文我们将向大家介绍&#xff0c;经过本次收购后&#xff0c;Akamai在保护API安全性方面的后续计划和未来愿景。 Noname Security是市场上领先的API安全供应商之一&#xff0c;此次收购将让Akamai能更好地满足日益增…

图像基础知识

图像卷积 卷积(convolution)是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠部分的面积。 卷积概念是两个变量在某范围内相乘后求和的结果。图像处理中的卷积概念:数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积…

Java进阶学习|Day4.Java多线程,线程池

文章目录 了解多线程CPU进程(Process)线程多线程开发多线程优点 实现方式继承Thread类实现Runnable接口实现Callable接口 线程状态转换线程状态线程调度调整线程优先级线程睡眠线程等待线程让步线程加入线程唤醒 线程同步线程同步方式多线程间通信 线程池了解线程池定义常见接口…

可视化作品集(02):应急预警上的应用

应急预警领域是可视化大屏的一个重要应用场景&#xff0c;大屏展示的海量数据能为应急工作提供数据支持&#xff0c;本文带大家看看这类大屏的设计。 可视化大屏在应急和预警领域有广泛的应用&#xff0c; 1. 突发事件监测和应急响应&#xff1a; 可视化大屏可以实时展示突发…

顺序表的应用——通讯录的实现

前言 本篇博客将接着上次顺序表的内容进行拓展应用&#xff0c;这次来为大家介绍通讯录的实现&#xff0c;它就是基于顺序表的结构完成的&#xff1b;如果你对此感兴趣&#xff0c;请看下面的内容&#xff1b; 1.顺序表的应用 我们前面学过&#xff0c;顺序表可以存放任意类…

Java | Leetcode Java题解之第214题最短回文串

题目&#xff1a; 题解&#xff1a; class Solution {public String shortestPalindrome(String s) {int n s.length();int[] fail new int[n];Arrays.fill(fail, -1);for (int i 1; i < n; i) {int j fail[i - 1];while (j ! -1 && s.charAt(j 1) ! s.charAt…

ASP.NET Core Blazor 5:Blazor表单和数据

本章将描述 Blazor 为处理 HTML 表单提供的特性&#xff0c;包括对数据验证的支持。 1 准备工作 继续使用上一章项目。   创建 Blazor/Forms 文件夹并添加一个名为 EmptyLayout.razor 的 Razor 组件。本章使用这个组件作为主要的布局。 inherits LayoutComponentBase<div …

论文 | PRCA: 通过可插拔奖励驱动的上下文适配器拟合用于检索问答的黑盒大语言模型

论文全称&#xff1a;PRCA: Fitting Black-Box Large Language Models for Retrieval Question Answering via Pluggable Reward-Driven Contextual Adapter 核心问题&#xff1a;如何在检索增强式问答&#xff08;ReQA&#xff09;任务中&#xff0c;利用大型语言模型&#xf…

【C语言入门】初识C语言:掌握编程的基石

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言入门 &#x1f4d2;1. 选择…

单片机关键任务优先级的实现学习

与总体产品联调时&#xff0c;需要各个单机系统严格按照总体要求&#xff0c;进行数据输出&#xff0c;时间的偏差将出现系统异常&#xff0c;控制失败等不稳定情况产生&#xff0c;甚至影响到产品安全。 因此必须确保某些关键任务的优先执行。单片机任务优先级一般有两种方式…

[小试牛刀-习题练]《计算机组成原理》之指令系统

一、选择题 0.【指令-课本习题】某计算机按字节编址&#xff0c;指令字长固定且只有两种指令格式&#xff0c;其中三地址指令29条&#xff0c;二地址指令107条&#xff0c;每个地址字段为6位&#xff0c;则指令字长至少应该是&#xff08;A&#xff09; A.24位 B. 26位 C. 28位…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

Android系统层屏蔽弹出停止运行对话框

项目场景&#xff1a; 车载项目&#xff0c;ATC8257-Android9.0系统平台&#xff0c;福田汽车P3系列项目 项目使用高德公版地图前提是无法获得任何高德定制服务&#xff0c;每次刷完机去切换语言系统会弹出"高德地图已停止运行"弹窗&#xff0c;严重影响用户使用体…

【第三版 系统集成项目管理工程师】第6章 数据工程

持续更新。。。。。。。。。。。。。。。 【第三版】第六章 数据工程 6.1数据采集和预处理6.1.1 数据采集 P2346.1.2 数据预处理6.1.3 数据预处理方法1.缺失数据的预处理-P2352.异常数据的预处理-P2363.不一致数据的预处理-P2364.重复数据的预处理-P2365.格式不符数据的预处理…

UE5 03-物体碰撞检测

在你需要碰撞的物体上添加一个碰撞检测组件 碰撞预设 设置为NoCollision,这样移动过程中就不会有物理碰撞阻挡效果,只负责检测是否碰撞,比较难解释,如果学过Unity的话,可以把它理解成 Collision 为 Trigger

My sql 安装,环境搭建

以下以MySQL 8.0.36为例。 一、下载软件 1.下载地址官网&#xff1a;https://www.mysql.com 2. 打开官网&#xff0c;点击DOWNLOADS 然后&#xff0c;点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Community Server 4.点击Archives选择合适版本 5.选择后下载第二个…

密码学复习

目录 基础 欧拉函数 欧拉函数φ(n)定义 计算方法的技巧 当a=a_1*a_2*……*a_n时 欧拉定理 剩余系 一些超简单密码 维吉尼亚 密钥fox 凯撒(直接偏移) 凯特巴氏(颠倒字母表) 摩斯密码(字母对应电荷线) 希尔(hill)密码 一些攻击 RSA 求uf+vg=1 快速幂模m^…