5.4. 問い合わせの対象

問い合わせの対象の型の解決

  1. 対象に正確に一致するかどうかを点検します。

  2. なければ、式を対象の型に強制してみます。もし二つの型がバイナリ互換性がある ものとして認識される、もしくは変換関数がある場合、これは成功します。 もし式が unknown 型リテラルの場合、リテラル文字列の内容は対象の型の入力変換 ルーチンに与えられます。

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

5.4.1. 例

5.4.1.1. varchar の保存

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) が システムカタログの中から見つかり、演算子の結果と格納された列の長さ に適用されます。この型特有の関数は期待される切り捨てを行います。