В одному з моїх операторів вибору я отримав таку помилку:
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 )
::text
не працював у мене. Це рішення зробило, поставивши 'text' перед текстовим літералом: stackoverflow.com/a/25193282/349169