postgresql – 无法找到从未知到文本的转换函数

前端之家收集整理的这篇文章主要介绍了postgresql – 无法找到从未知到文本的转换函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的一个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,但我不完全明白为什么会发生。我将解释我对两个简单陈述的混淆。

这一个是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'

为什么第二个示例中的转换失败?有一些逻辑,我不明白或这将是固定的Postgresql的未来版本?

Postgresql 9.1.9

同样的行为在Postgresql 9.2.4(SQL Fiddle)

Postgres很高兴,如果它可以从上下文检测类型的无类型常量。但是当任何上下文不可能时,并且当查询比平凡一点点复杂时,这个机制失败。这些规则特定于任何SELECT子句,有些是更严格的,有些不是。如果我可以说,那么较老的例程更容忍(由于与Oracle的更高兼容性和对初学者的负面影响较小),现代的更不容忍(由于类型错误的更高的安全性)。

有一些建议尝试使用任何未知的字面常量,如文本常量,但被拒绝了更多的理由。所以我不期望这方面的重大变化。这个问题通常与合成测试相关 – 更少与实际查询相关,其中类型是从列类型中推导出来的。

猜你在找的Postgre SQL相关文章