pg_dirtyread
pg_dirtyread : Read dead but unvacuumed rows from table
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 5050 | pg_dirtyread | pg_dirtyread | 2.8 |
ADMIN | BSD-3-Clause | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
| --s-d-r | No | Yes | No | Yes | yes | no |
| Relationships | |
|---|---|
| See Also | pg_visibility pageinspect pg_surgery pgstattuple pg_repack old_snapshot temporal_tables pg_squeeze pg_rewrite pg_cheat_funcs |
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | MIXED | 2.8 |
18 17 16 15 14 | pg_dirtyread |
- |
| RPM | PIGSTY | 2.8 |
18 17 16 15 14 | pg_dirtyread_$v |
- |
| DEB | PGDG | 2.8 |
18 17 16 15 14 | postgresql-$v-dirtyread |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 |
| el8.aarch64 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 |
| el9.x86_64 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 |
| el9.aarch64 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 |
| el10.x86_64 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 |
| el10.aarch64 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 | PIGSTY 2.8 |
| d12.x86_64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| d12.aarch64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| d13.x86_64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| d13.aarch64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| u22.x86_64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| u22.aarch64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| u24.x86_64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| u24.aarch64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| u26.x86_64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
| u26.aarch64 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 | PGDG 2.8 |
Source
github.com/df7cb/pg_dirtyread
pg_dirtyread-2.8.tar.gz
Install
Make sure PGDG and PIGSTY repo available:
Install this extension with pig:
Create this extension with:
Usage
Sources: upstream README, Debian changelog, tags.
pg_dirtyread reads dead or updated heap rows that have not yet been vacuumed away. The function returns record, so every call needs a table alias that declares the columns you want back.
Basic Usage
Columns are matched by name, so the alias can omit columns or place them in a different order.
Example
The deleted row can remain visible until vacuum removes it.
Dropped Columns
Dropped column contents can be retrieved as long as the table has not been rewritten by operations such as VACUUM FULL or CLUSTER. Use dropped_N, where N is the original 1-based column position:
Only limited type checks are possible because PostgreSQL removes the dropped column’s original type metadata.
System Columns
Include system columns in the alias to retrieve them. A special dead boolean column reports rows that are surely dead:
The dead column is not usable during recovery, including on standby servers. The oid system column is only available on PostgreSQL 11 and earlier.
Caveats
- Pigsty packages
pg_dirtyread2.8 as RPMs for PostgreSQL 14-18; DEB availability comes from PGDG aspostgresql-$v-dirtyread. - Upstream 2.8 is a PostgreSQL 19 compatibility release for the default TOAST compression change to
lz4; no new user-facing SQL function is documented. pg_dirtyreadis for forensic and recovery-style inspection. It bypasses normal MVCC visibility expectations and should not be used for application reads.