postgresql – 无法找到从未知到文本的转换函数
发布时间:2020-12-13 16:43:33 所属栏目:百科 来源:网络整理
导读:在我的一个select语句中,我有以下错误: ERROR: failed to find conversion function from unknown to text********** Error **********ERROR: failed to find conversion function from unknown to textSQL state: XX000 这很容易解决使用cast,但我不完全
在我的一个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的更高兼容性和对初学者的负面影响较小),现代的更不容忍(由于类型错误的更高的安全性)。
有一些建议尝试使用任何未知的字面常量,如文本常量,但被拒绝了更多的理由。所以我不期望这方面的重大变化。这个问题通常与合成测试相关 – 更少与实际查询相关,其中类型是从列类型中推导出来的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |