运算符不存在:字符变化 = Postgres 中的记录

Posted

技术标签:

【中文标题】运算符不存在:字符变化 = Postgres 中的记录【英文标题】:Operator does not exist: character varying = record in Postgres 【发布时间】:2020-04-19 13:10:10 【问题描述】:

我正在尝试在社区版的 postgres 中执行查询:

select COUNT(*) 
from cdar_cpms_owner.hshldgrp_wkly_actvty 
where wkly_actvty_cd  IN (('B','H') ,'N')

从那个查询中,我得到了这个错误:

错误:运算符不存在:字符变化 = 记录

第 1 行: ..._owner.hshldgrp_wkly_actvty 其中 wkly_actvty_cd IN(('B','H... ^ 提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。

虽然相同的查询在 EDB 版本的 postgres 上运行良好。

谁能建议此查询需要进行哪些更改才能使其正常工作?

【问题讨论】:

('B','H') 应该是什么?这对我来说没有任何意义。你的意思是('(''B'',''H'')', 'N') 【参考方案1】:

这里:

where wkly_actvty_cd IN ( ('B','H'),'N')

您的列表有一个嵌套列表元素:('B','H')。所以 Postgres 最终会尝试将标量值 (wkly_actvty_cd) 与元组进行比较,这会引发您遇到的错误。

你说的是真的吗?

where wkly_actvty_cd IN ('B', 'H', 'N')

【讨论】:

不,我想与嵌套列表元素进行比较:('B','H') 和 'N'。奇怪的是,带有 wkly_actvty_cd IN (('B','H'),'N') 的 Enterprise Postgres 的查询工作正常,但在 Community Edition Postgres 中却不行。 @Saurabhwagh:请解释您想要比较的逻辑是什么。你想要wkly_actvty_cd,其值为'B''H'或'N'?还是别的什么(什么)? 对不起,但即使我也不确定这个完整的逻辑。我发现这个逻辑是用遗留代码编写的,我尝试使用这个where wkly_actvty_cd IN('N') 它也给了我与where wkly_actvty_cd IN ( ('B','H'),'N') 相同的计数。所以我认为where wkly_actvty_cd IN('N')这个逻辑也适用于查询,如果我错了请纠正我。 @Saurabhwagh:我无法告诉你什么你想要的逻辑是什么。我只能告诉你如何实现一些逻辑,如果你能描述的话......

以上是关于运算符不存在:字符变化 = Postgres 中的记录的主要内容,如果未能解决你的问题,请参考以下文章

SequelizeDatabaseError:运算符不存在:字符变化 [] @> 字符变化

错误:运算符不存在:字符变化 = bytea

PostgreSQL:错误:运算符不存在:整数 = 字符变化

导轨 3.1。 Heroku PGError:运算符不存在:字符变化=整数

否定 ?& JSON 运算符

NHibernate 拒绝验证 postgres12 中 varchar(255) 的字符变化