pg_cast> catalog, apply it to the expression before storing
into the destination column. The implementation function for such a cast
always takes an extra parameter of type integer, which receives
-the destination column's declared length (actually, its
-atttypmod> value; the interpretation of
-atttypmod> varies for different data types). The cast function
+the destination column's atttypmod> value (typically its
+declared length, although the interpretation of atttypmod>
+varies for different data types), and it may take a third boolean>
+parameter that says whether the cast is explicit or implicit. The cast
+function
is responsible for applying any length-dependent semantics such as size
checking or truncation.
character Storage Type Conversion
-For a target column declared as character(20) the following statement
-ensures that the stored value is sized correctly:
+For a target column declared as character(20) the following
+statement shows that the stored value is sized correctly:
CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
-SELECT v, length(v) FROM vv;
+SELECT v, octet_length(v) FROM vv;
- v | length
-----------------------+--------
- abcdef | 20
+ v | octet_length
+----------------------+--------------
+ abcdef | 20
(1 row)
column type. (Since the conversion from text to
bpchar is binary-coercible, this conversion does
not insert any real function call.) Finally, the sizing function
-bpchar(bpchar, integer)> is found in the system catalog
+bpchar(bpchar, integer, boolean)> is found in the system catalog
and applied to the operator's result and the stored column length. This
type-specific function performs the required length check and addition of
padding spaces.