В одном из моих операторов выбора я получил следующую ошибку:
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
, но я не совсем понимаю, почему это произошло. Я проиллюстрирую свое замешательство двумя простыми утверждениями.
Это нормально:
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'
Почему во втором примере преобразование не выполняется? Есть ли какая-то логика, которую я не понимаю, или это будет исправлено в будущей версии PostgreSQL?
PostgreSQL 9.1.9
То же поведение в PostgreSQL 9.2.4 (SQL Fiddle)