首页 > 解决方案 > Postgres:如何将 pageinspect 返回的原始行 t_data 转换回类型化数据

问题描述

我正在使用 pageinspect 扩展来检查 Postgres 中的旧行版本。这是我正在使用的查询:

SELECT ctid, tuple_data_split('t0'::regclass, t_data, t_infomask, t_infomask2, t_bits) AS raw_row_data
FROM heap_page_items(get_raw_page('t0',0));

例如,假设我有一个包含两个整数列的表并插入 (1, 1)。然后我将其更新为 (2, 2)。上述查询将返回以下内容:

  ctid  |       raw_row_data
--------+-------------------------------
 (0,1)  | {"\\x01000000","\\x01000000"}
 (0,2)  | {"\\x02000000","\\x02000000"}

我想修改查询,以便我可以获取键入格式的数据。例如,我希望查询返回:

  ctid  | typed_row_data
--------+----------------
 (0,1)  | {1,1}
 (0,2)  | {2,2}

在这种特定情况下,我可以只添加一个函数来将 bytea 转换为 int,但是我希望这适用于任何可能包含编写查询时不知道的数据类型的给定表。我知道可以手动检索表模式,因此应该可以使用它来根据数据类型选择适当的转换函数。是否有任何现有的功能可以做到这一点?或者,有没有更好的方法来做到这一点?

标签: postgresql

解决方案


推荐阅读