53.10. 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
.
Table 53.10.
pg_cast
Columns
Column Type Description |
---|
Row identifier |
OID of the source data type |
OID of the target data type |
The OID of the function to use to perform this cast. Zero is stored if the cast method doesn't require a function. |
Indicates what contexts the cast can be invoked in.
|
Indicates how the cast is performed.
|
The cast functions listed in
pg_cast
must
always take the cast source type as their first argument type, and
return the cast destination type as their result type. A cast
function can have up to three arguments. The second argument,
if present, must be type
integer
; it receives the type
modifier associated with the destination type, or -1
if there is none. The third argument,
if present, must be type
boolean
; it receives
true
if the cast is an explicit cast,
false
otherwise.
It is legitimate to create a
pg_cast
entry
in which the source and target types are the same, if the associated
function takes more than one argument. Such entries represent
"
length coercion functions
"
that coerce values of the type
to be legal for a particular type modifier value.
When a
pg_cast
entry has different source and
target types and a function that takes more than one argument, it
represents converting from one type to another and applying a length
coercion in a single step. When no such entry is available, coercion
to a type that uses a type modifier involves two steps, one to
convert between data types and a second to apply the modifier.