加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读