【问题标题】:ERROR: failed to find conversion function from unknown to text错误:找不到从未知到文本的转换函数
【发布时间】:2014-10-01 07:15:54
【问题描述】:

在我的一个选择语句中给出了 PostgreSQL 上的错误。我在网上搜索了答案,结果空手而归。另一个问题中给出的答案不适合我的问题。

ERROR:  failed to find conversion function from unknown to text
********** Error **********
ERROR: failed to find conversion function from unknown to text
SQL state: XX000

我的查询如下所示:

Select * 
from (select 'string'  as Rowname, Data
      From table)
Union all
     (select 'string2' as Rowname, Data
      From table)

这样做的目的是在某一点指定行是什么。字符串是行的名称。这是我想要的输出:

Rowname Data 
string  53
string2 87

有什么方法可以解决这个错误?

【问题讨论】:

  • postgresql 通常不需要像 Oracle(例如)那样的 FROM 子句

标签: sql postgresql types casting union


【解决方案1】:

更新: Postgres 的更高版本中的类型解析变得更加智能,UNION, CASE, and Related Constructs 的这条规则将其解析为没有显式转换的文本:

  1. 如果所有输入都是未知类型,则解析为类型text(字符串类别的首选类型)。 [...]
SELECT 'string' AS rowname, data FROM tbl1
UNION ALL
SELECT 'string2', data FROM tbl2;

在 Postgres 9.4 (?) 之前的旧版本中,或者对于非默认类型,您可能仍需要添加如下显式转换。


你的陈述有几个问题。但是错误消息暗示您需要一个 explicit cast 来声明字符串文字 'string' 的(尚未知的)数据类型:

SELECT text 'string' AS rowname, data FROM tbl1
UNION ALL
SELECT 'string2', data FROM tbl2;

UNION 查询中输入一个SELECT 就足够了。通常是第一个,其中列名也被确定。后续的SELECT 列表类型未知。

在其他情况下(例如附加到INSERTVALUES 子句)Postgres 从目标列派生数据类型并尝试自动强制转换为正确的类型。

【讨论】:

  • 为什么Postgresql要我们严格写类型? AFAIK,它应该使用第一个查询来确定 UNION 语句的类型,并且 Postgresql 中没有其他类型被定义为“anythingOtherThanQuote”。是不是因为 Postgresql 不够聪明,无法推断类型或设计决策?
  • @burakemre:您似乎错过了rowname 不是来自任何东西,而是一个真正的新专栏。所以无法推断类型。
  • 我不明白为什么 Postgresql 不能执行这个查询:"SELECT * FROM (SELECT 'string') a UNION ALL SELECT 'string2'",当我取出 UNION ALL 部分时,它按预期工作。 Postgresql 已经知道字符串文字,我希望 Postgresql 对字符串文字“字符串”使用“文本”类型。你能解释一下我在这里缺少什么吗?
  • @burakemre:记录在案:这个问题后来得到修复,现在无需显式转换即可工作。
【解决方案2】:
Select * from (select CAST('string' AS text) as Rowname, Data
  From table) Union all
 (select CAST('string2' AS text) as Rowname, Data
  From table)

Reference

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多