Storage & tuples

TID (ctid)

Also called: ctid, tuple identifier, item pointer

A TID is the physical address of a row version: a pair of numbers written (block, slot). The first is which page the row lives on, the second is which line-pointer slot on that page. The system column ctid exposes it on every table.

What this means

A row version's physical home address, written as (block, slot): which 8 KB page it lives on, and which line-pointer slot on that page points to it. The hidden ctid column shows it on any table. It's exact but not permanent, cleanup can move a row and change its ctid.

Why it matters operationally

Indexes store TIDs to find heap rows, and an UPDATE sets the old version's t_ctid to point at the new version, that pointer is what forms a HOT chain. A TID is not stable: VACUUM and updates move rows, so never store a ctid as a long-lived key. It is, however, perfect for inspecting a specific page with pageinspect.

Related & next

Heap Pruning, how t_ctid links versions into a chainLine pointer, the slot half of a TIDHeap-Only Tuple, built from t_ctid pointers

← All glossary terms · GUC reference · Error catalog