問い合わせの対象の型の解決
対象に正確に一致するかどうかを点検します。
なければ、式を対象の型に強制してみます。もし二つの型がバイナリ互換性がある ものとして認識される、もしくは変換関数がある場合、これは成功します。 もし式が unknown 型リテラルの場合、リテラル文字列の内容は対象の型の入力変換 ルーチンに与えられます。
対象が固定長な型(例えば char や varchar 型) ならば、大きさを調整する関数を探します。 大きさを調整する関数は、同じ名前の型で、1 つ目がその型、2 つ目が整数という 二つの引数をとり、同じ型を返すという関数です。 もし一つが見つかれば、適用され、列の宣言された長さを二番目のパラメータ として渡します。
varchar(4) として宣言された対象のカラムへの以下の問い 合わせでは、対象の大きさが正確であることが保証されています。
tgl=> CREATE TABLE vv (v varchar(4)); CREATE tgl=> INSERT INTO vv SELECT 'abc' || 'def'; INSERT 392905 1 tgl=> SELECT * FROM vv; v ------ abcd (1 row)ここで実際に起こったのは、二つの unknown リテラルがデフォルトで text へと型解決され、|| 演算子が text の連結として評価 されるということです。そして演算子のテキスト結果は対象の列の型に 合うように varchar へ型強制されます。(しかし、パーサは text と varchar がバイナリ互換性があることを認識しているので、この型強制は 暗黙のもので実際の関数呼び出しは挿入しません。)最後に、 大きさを調整する関数 varchar(varchar,int4) が システムカタログの中から見つかり、演算子の結果と格納された列の長さ に適用されます。この型特有の関数は期待される切り捨てを行います。