をテキストに、未知からの変換機能が見つかりませんでした:は私のselect文、私は次のエラーを持っているのでは
ERROR: failed to find conversion function from unknown to text
********** Error **********
ERROR: failed to find conversion function from unknown to text
SQL state: XX000
これはcast
を使用して修正するのは簡単だったが、それはなぜ起こったか、私は完全には理解していません。私は2つの簡単なステートメントで私の混乱を払拭します。
この1つはOKです:
select 'text'
union all
select 'text';
これはエラーを返します:
with t as (select 'text')
select * from t
union all
select 'text'
私は簡単にそれを修正することができます知っている:
with t as (select 'text'::text)
select * from t
union all
select 'text'
変換がで失敗しないのはなぜ2番目の例?私が理解できない、またはPostgreSQLの将来のバージョンでこれが修正されるいくつかのロジックがありますか?それは文脈から型を持たない定数の型を検出できる場合
のPostgreSQL 9.1.9
のPostgreSQL 9.2.4(SQL Fiddle)に同じ挙動
です。私はこの問題を現実にはかなり頻繁に直面しています。私たちは、analytics/bi/dataマイニングにPostgreSQLを使用しており、タイプのない定数の和集合が一般的です。しかし、私が言ったように、キャストするのは簡単です。 –
なぜ '1 :: int'のような数値リテラルをキャストしなければならないのですか? –
@IainElder - 数値型はより小さいクラスです - 任意のリテラル定数( "不明"という名前の)は暗黙的にどの型にもキャストできます - sin( '2.34')は機能していますが、 –