Skip to content
← Catalog atlas / pg_cast

SYSTEM CATALOG · System catalog

pg_cast

The catalog pg_cast stores data type conversion paths, both built-in and user-defined. It should be noted that pg_cast does not represent every type conversion that the system knows how to perform; only those that cannot be deduced from some generic rule. For example, casting between a domain and its base type is not explicitly represented in pg_cast. Another important exception is that “automatic I/O conversion casts”, those performed using a data type's own I/O functions to convert to or from text or other string types, are not explicitly represented in pg_cast.

First seen PG 9.0Last seen PG 19Columns 6

Checked column by column against a PostgreSQL 18.6 instance · Raw measurement record ↗

Columns PostgreSQL 18

pg_cast
COLUMNTYPEDESCRIPTION
oid oidNOT NULL Row identifier
castsource oidNOT NULL OID of the source data typeReferences:pg_type.oid
casttarget oidNOT NULL OID of the target data typeReferences:pg_type.oid
castfunc oidNOT NULL The OID of the function to use to perform this cast. Zero is stored if the cast method doesn't require a function.References:pg_proc.oid
castcontext "char"NOT NULLDocumented as:char Indicates what contexts the cast can be invoked in. e means only as an explicit cast (using CAST or :: syntax). a means implicitly in assignment to a target column, as well as explicitly. i means implicitly in expressions, as well as the other cases.
castmethod "char"NOT NULLDocumented as:char Indicates how the cast is performed. f means that the function specified in the castfunc field is used. i means that the input/output functions are used. b means that the types are binary-coercible, thus no conversion is required.

Columns marked "implicit" are not included in SELECT *; some early statistics views are completed from same-version source, and the extra provenance is shown in the column description.

Common system columns 6

System attributes PostgreSQL provides, normally not expanded by SELECT *. Kept separately so they are not mixed in with ordinary columns.

ColumnsTypeattnum
tableoidoid-6
cmaxcid-5
xmaxxid-4
cmincid-3
xminxid-2
ctidtid-1

Column evolution matrix

Hover a cell for the column type
PresentAdded / type or attribute changeRemoved
COLUMN9.09.19.29.39.49.59.610111213141516171819
oid
castsource
casttarget
castfunc
castcontext
castmethod

9.0 is the coverage baseline; a column already present in the baseline is not marked as added. The matrix aligns columns by name, so a rename appears as the old column removed and a new column added.

Evolution timeline

Changes between adjacent majors

PostgreSQL 12 ← 11

~ oid: implicit → ordinary1 column description updates

PostgreSQL 10 ← 9.6

Catalog description updated

PostgreSQL 9.3 ← 9.2

1 column description updates

PostgreSQL 9.2 ← 9.1

Catalog description updated

Compare any two versions

Pick two versions to see added, removed, and retyped columns. The interactive comparison needs JavaScript; the evolution timeline reads fine without it.