错误:未能找到从未知到文本的转换函数

Pad*_*mez 11 sql postgresql union types casting

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
Run Code Online (Sandbox Code Playgroud)

我的查询看起来像这样:

Select * 
from (select 'string'  as Rowname, Data
      From table)
Union all
     (select 'string2' as Rowname, Data
      From table)
Run Code Online (Sandbox Code Playgroud)

这样做的目的是指定行在一个点上的位置.该字符串是行的名称.这是我想要的输出:

Rowname Data 
string  53
string2 87
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个错误?

Erw*_*ter 16

你的陈述有几个问题.但错误消息暗示您需要显式强制转换来声明字符串文字的(但未知)数据类型'string':

SELECT text 'string' AS rowname, data FROM tbl1
UNION ALL
SELECT 'string2', data FROM tbl2
Run Code Online (Sandbox Code Playgroud)

这仅适用于SELECT查询的第一个SELECT .后来的腿已经知道每列的名称和类型.

在其他上下文(例如UNION)中,Postgres可以从目标列派生数据类型,并尝试自动强制转换为正确的数据类型.

  • 我不明白为什么Postgresql不能执行这个查询:"SELECT*FROM(SELECT'string')一个UNION ALL SELECT'string2'",当我取出UNION ALL部分时,它按预期工作.Postgresql已经知道字符串文字,我希望Postgresql使用"text"类型作为字符串文字'string'.你能解释一下我在这里缺少什么吗? (2认同)