pg_dirtyread
从表中读取尚未垃圾回收的行
仓库
df7cb/pg_dirtyread
https://github.com/df7cb/pg_dirtyread
源码
pg_dirtyread-2.8.tar.gz
pg_dirtyread-2.8.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_dirtyread | 2.8 | ADMIN | BSD-3-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 5050 | pg_dirtyread | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | pg_visibility pageinspect pg_surgery pgstattuple pg_repack old_snapshot temporal_tables pg_squeeze pg_rewrite pg_cheat_funcs |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 2.8 | 1817161514 | pg_dirtyread | - |
| RPM | PIGSTY | 2.8 | 1817161514 | pg_dirtyread_$v | - |
| DEB | PGDG | 2.8 | 1817161514 | postgresql-$v-dirtyread | - |
构建
您可以使用 pig build 命令构建 pg_dirtyread 扩展的 RPM 包:
BASH
安装
您可以直接安装 pg_dirtyread 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
创建扩展:
SQL
用法
来源:upstream README、Debian changelog、tags。
pg_dirtyread 可以读取尚未被 vacuum 清理掉的死亡或已更新堆表行。该函数返回 record,因此每次调用都需要带一个表别名,用来声明希望返回的列。
基本用法
SQL
列按名称匹配,因此别名可以省略部分列,也可以使用不同的列顺序。
示例
SQL
被删除的行在 vacuum 移除之前仍可能可见。
已删除的列
只要表还没有被 VACUUM FULL 或 CLUSTER 等操作重写,就可以取回已删除列的内容。使用 dropped_N,其中 N 是原始的 1 基列序号:
SQL
由于 PostgreSQL 会移除已删除列的原始类型元数据,这里只能执行有限的类型检查。
系统列
在别名中包含系统列即可取回它们。特殊的 dead boolean 列会报告确定已经死亡的行:
SQL
dead 列在恢复期间不可用,包括在备用服务器上。oid 系统列只在 PostgreSQL 11 及更早版本中可用。
注意事项
- Pigsty 将
pg_dirtyread2.8 作为 PostgreSQL 14-18 的 RPM 打包;DEB 可用性来自 PGDG 的postgresql-$v-dirtyread。 - 上游 2.8 是面向 PostgreSQL 19 默认 TOAST 压缩改为
lz4的兼容性发布;没有记录新的面向用户 SQL 函数。 pg_dirtyread用于取证和恢复类检查。它绕过常规 MVCC 可见性预期,不应被用于应用读取。