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 数据文件的内部结构。- 通过解析输出,可以深入理解表和索引的存储布局,帮助问题诊断和性能调优。
相关文章:
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 端口:5777pg_filedump 是一个工具&#x…...
Java语言+后端+前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码
Java语言后端前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码 Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等…...
Linux 服务器环境搭建
一、安装 JDK 官网下载地址:https://www.oracle.com/java/technologies/downloads # 创建目录 mkdir /usr/local/java/# 解压 tar -zxvf jdk-8u333-linux-x64.tar.gz -C /usr/local/java/# 配置环境变量 vim /etc/profileexport export JAVA_HOME/usr/local/java/…...
RabbitMQ 更改服务端口号
需求 windows环境下,将RabbitMQ默认的端口号 5672 改为 11001 实现 本机RabbitMQ版本为3.8.16,找到配置文件位置,路径为:C:\Users\%USERNAME%\AppData\Roaming\RabbitMQ\advanced.config 配置文件默认内容为空 填写修改端口号…...
16:9横屏短视频素材库有哪些?横屏短视频素材网站分享
在这个视觉内容至关重要的时代,16:9横屏视频因其宽广的画面和优越的观赏体验,已经成为无数创作者和营销专家的首选格式。但要创造出吸引人的横屏视频,高质量的视频素材库是不可或缺的。不管你是资深视频制作人还是刚入行的新手,下…...
在Java中,创建一个实现了Callable接口的类可以提供强大的灵活性,特别是当你需要在多线程环境中执行任务并获取返回结果时。
在Java中,创建一个实现了Callable接口的类可以提供强大的灵活性,特别是当你需要在多线程环境中执行任务并获取返回结果时。以下是一个简单的案例,演示了如何创建一个实现了Callable接口的类,并在线程池中执行它。 首先࿰…...
Vuforia AR篇(八)— AR塔防上篇
目录 前言一、设置Vuforia AR环境1. 添加AR Camera2. 设置目标图像 二、创建塔防游戏基础1. 导入素材2. 搭建场景3. 创建敌人4. 创建脚本 前言 在增强现实(AR)技术快速发展的今天,Vuforia作为一个强大的AR开发平台,为开发者提供了…...
Spring AOP源码篇四之 数据库事务
了解了Spring AOP执行过程,再看Spring事务源码其实非常简单。 首先从简单使用开始, 演示Spring事务使用过程 Xml配置: <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema…...
小波与傅里叶变换的对比(Python)
直接上代码,理论可以去知乎看。 #Import necessary libraries %matplotlib inline import numpy as np import matplotlib.pyplot as plt import seaborn as snsimport pywt from scipy.ndimage import gaussian_filter1d from scipy.signal import chirp import m…...
Linux-sqlplus安装
1.下载安装包 下载入口:安装包 下载对应版本: oracle-instantclient-sqlplus-21.14.0.0.0-1.x86_64.rpm oracle-instantclient-basic-21.14.0.0.0-1.x86_64.rpm oracle-instantclient-devel-21.14.0.0.0-1.x86_64.rpm 2.安装 [rootpromethues-01 tmp…...
LeetCode 算法:课程表 c++
原题链接🔗:课程表 难度:中等⭐️⭐️ 题目 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i]…...
前端面试题30(闭包和作用域链的关系)
闭包和作用域链在JavaScript中是紧密相关的两个概念,理解它们之间的关系对于深入掌握JavaScript的执行机制至关重要。 作用域链 作用域链是一个链接列表,它包含了当前执行上下文的所有父级执行上下文的变量对象。每当函数被调用时,JavaScri…...
A股本周在3000点以下继续筑底,本周依然继续探底?
夜已深,市场传来了3个浓烈的消息,炸锅了,恐有大事发生,马上告诉所有人: 消息面: 1、中国经济周刊首席评论员钮文新称:不要等中小投资者都彻底希望,销户离场了,才发现该…...
Javadoc介绍
Javadoc 是用于生成 Java 代码文档的工具。它利用特定的注释格式,将 Java 源代码中的注释提取出来,并生成 HTML 文档。Javadoc 注释通常位于类、接口、构造函数、方法和字段的声明之前,以 /** 开始,以 */ 结束。以下是 Javadoc 注释的一些主要元素和使用方法: 基本语法 …...
C# Application.DoEvents()的作用
文章目录 1、详解 Application.DoEvents()2、示例处理用户事件响应系统事件控制台输出游戏和多媒体应用与操作系统的交互 3、注意事项总结 Application.DoEvents() 是 .NET 框架中的一个方法,它主要用于处理消息队列中的事件。在 Windows 应用程序中,当一…...
IDEA如何创建原生maven子模块
文件 -> 新建 -> 新模块 -> Maven ArcheTypeMaven ArcheType界面中的输入框介绍 名称:子模块的名称位置:子模块存放的路径名创建Git仓库:子模块不单独作为一个git仓库,无需勾选JDK:JDK版本号父项:…...
LCD EMC 辐射 测试随想
最近做几个产品过认证。 有带2.8寸 MCU8080接口的小屏(320 X 240),也有RGB接口的10.1寸的大屏(800*600). 以下为个人随想,不知道是否正确,仅作记录。 测试发现辐射的核心问题还是在于时钟及其倍频所产生的尖峰。 记得读…...
Docker安装遇到问题:curl: (7) Failed to connect to download.docker.com port 443: 拒绝连接
问题描述 首先,完全按照Docker官方文档进行安装: Install Docker Engine on Ubuntu | Docker Docs 在第1步:Set up Dockers apt repository,执行如下指令: sudo curl -fsSL https://download.docker.com/linux/ubu…...
阿里云安装rabbitMQ
1、首先看linux 版本 uname -a如果时centos 7 可以参考其他文档。我这里是centos 8 这个很重要 。网上全是按centos7 按照。导致我前面一直安装不上 各种问题。 2、查看rabbitmq 对应 erl 的版本下载 https://www.rabbitmq.com/docs/which-erlang 选择rabbitmq 3.11.19 选择…...
中文大模型基准测评2024上半年报告
中文大模型基准测评2024上半年报告 原创 SuperCLUE CLUE中文语言理解测评基准 2024年07月09日 18:09 浙江 SuperCLUE团队 2024/07 背景 自2023年以来,AI大模型在全球范围内掀起了有史以来规模最大的人工智能浪潮。进入2024年,全球大模型竞争态势日益加…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
