UNION と CASE 構築子は、単一の結果集合となるためには、似ていない可能性が ある型と適合しなければなりません。解決アルゴリズムは UNION のそれぞれの 出力に別々に適応されます。CASE は、結果の式を適合するために、同一のアルゴリズム を使います。
UNION と CASE 型評価
もし全ての入力値が unknown 型だった場合、text 型(文字列カテゴリの好ましい型)として解釈されます。 そうでない場合は、型を選ぶ間はunknown 入力は無視します。
もし unknown ではない入力値がすべて同じ型カテゴリでなければ失敗します。
一つ以上の unknown ではない入力値がそのカテゴリの好ましい型だった場合、 その型として解決します。
そうでなければ、最初の unknown ではない入力値の型として解決されます。
全ての入力値を選択された型に強制します。
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ------ a b (2 rows)ここでは、unknown 型のリテラル 'b' が text 型として解釈されます。
tgl=> SELECT 1.2 AS "Double" UNION SELECT 1; Double -------- 1 1.2 (2 rows)
ここでは union の出力型はその union の最初/頂点の句の型に 合うよう強制されます。
tgl=> SELECT 1 AS "All integers" tgl-> UNION SELECT CAST('2.2' AS REAL); All integers -------------- 1 2 (2 rows)
REAL は好ましい型ではないため、パーサがINTEGER ( 1 は整数です)ではなくそれを選ぶ理由は何もなく、代わりに 最初の代替を使うというルールが適用されます。 この例は好ましい型のメカニズムは、我々が望むほど多くの情報 はコード化していないということを表しています。将来の Postgresバージョンではもっと一般的な 型優先の考え方がサポートされるかもしれません。