pg_frozen

July 20, 2020 ยท View on GitHub

The scrappiest of Postgres extensions that can be used to detect whether a tuple has been frozen. Use it like so:

database=# drop extension if exists pg_frozen; create extension pg_frozen;
DROP EXTENSION
CREATE EXTENSION

database=# create table messages (id bigserial, msg text, primary key(id));
CREATE TABLE

database=# insert into messages (msg) values ('hello');
INSERT 0 1

database=# select id, msg, ctid, xmin, frozen(tableoid, ctid) from messages;
 id |  msg  | ctid  |  xmin  | frozen 
----+-------+-------+--------+--------
  1 | hello | (0,1) | 215938 |      0
(1 row)

database=# vacuum (freeze) messages;
VACUUM

database=# select id, msg, ctid, xmin, frozen(tableoid, ctid) from messages;
 id |  msg  | ctid  |  xmin  | frozen 
----+-------+-------+--------+--------
  1 | hello | (0,1) | 215938 |      1
(1 row)