Special Columns

In addition to user-defined columns, every PostgreSQL database table has system-defined columns associated with it. The oid and the tableoid columns are described in the Red Hat Database SQL Guide and Reference. This section describes some additional system-defined columns that are used by the concurrency-control mechanism.

xmin

The identity (transaction ID) of the inserting transaction for this tuple. (Note: a tuple is an individual state of a row; each UPDATE of a row creates a new tuple for the same logical row.)

cmin

The command identifier (starting at zero) within the inserting transaction.

xmax

The identity (transaction ID) of the deleting transaction, or zero for an undeleted tuple. In practice, this is never nonzero for a visible tuple.

cmax

The command identifier within the deleting transaction, or zero. Again, this is never nonzero for a visible tuple.

ctid

The tuple ID of the tuple within its table. This is a pair (block number, tuple index within block) that identifies the physical location of the tuple. Note that although the ctid can be used to locate the tuple very quickly, a row's ctid will change each time it is updated or moved by VACUUM. Therefore ctid is useless as a long-term row identifier. The OID, or even better a user-defined serial number, should be used to identify logical rows.

Transaction and command identifiers are 32-bit quantities.