10.4. 値の格納

以下の手順に従って、テーブルに挿入される値は対象とする列のデータ型に変換されます。

値の格納における型変換

  1. 対象に正確に一致するかどうかをチェックします。

  2. なければ、式を対象の型に変換してみます。 もし2つの型の間のキャストが登録されている場合、これは成功します。 もし式がunknown型リテラルの場合、リテラル文字列の内容は対象の型の入力変換ルーチンに与えられます。

  3. 対象が固定長な型(たとえばcharvarchar型)ならば、対象の型用のサイズ調整関数を探します。 サイズ調整関数は、型と同じ名前で、1つ目がその型、2つ目がintegerという2つの引数をとり、同じ型を返すという関数です。 もしそれが見つかれば、適用され、列の宣言された長さを2番目のパラメータとして渡します。

例 10-6. character格納における型変換

varchar(20)として宣言された対象の列への以下の文では、対象の大きさが正確に調整されることが保証されます。

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, length(v) FROM vv;

          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

ここで実際に起こったのは、デフォルトで||演算子がtext の連結として解決できるように、2つのunknownリテラルがtextに解決されたということです。 そして演算子のtext型の結果は対象の列の型に合うようにbpchar("空白が埋められる文字"。 これはcharacterデータ型の内部名です。)に変換されます。 (しかし、textbpcharがバイナリ互換ですので、この型変換のために実際の関数呼び出しは挿入しません。) 最後に、サイズ調整関数bpchar(bpchar,integer)がシステムカタログの中から見つかり、演算子の結果と格納する列の長さを適用します。 この型特有の関数は必要とされる長さを検査し、空白の埋め込みを行います。