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的更高兼容性和对初学者的负面影响较小),现代的更不容忍(由于类型错误的更高的安全性)。

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

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...