No operator matches the given name and argument type(s). You might need to add explicit type casts报错

2023-11-01 15:50

本文主要是介绍No operator matches the given name and argument type(s). You might need to add explicit type casts报错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、报错信息:

PostgreSQL下数据类型转化报错:No operator matches the given name and argument type(s). You might need to add explicit type casts报错。
正式环境,出现如下问题:

在这里插入图片描述
但是公司内网测试环境竟然没有报错(离大谱)!!
在这里插入图片描述

二、出现问题原因为:

数据库字段中使用int2,参数类型为String,此时就会报 character varying = bigint错误。

三、解决方案:
(1)修改代码参数类型

有人就直接修改了代码参数类型,修改接口参数即可,然后再使用jenkins构建发布,幸运的话就直接解决问题了,倘如项目有很多诸如类似的问题,全局搜索后绝望无比。。。

(2)使用强转函数
那么有的人说不想修改参数怎么办,另一种方式就是修改xml中表的字段。
在这里插入图片描述

(3)创建新的类型转换

那么又有人说,我没有使用xml写sql语句,使用的注解方式(复杂sql不建议使用注解方式)或者说字段太多一个个修改效率太低怎么办?就不能像MySQL和Oracle那样默认对数据类型进行转换吗?
pg确实没有实现数据类型的自动转换,但是!pg官方文档中也给出了相应处理方式,可以设置自定义的数据类型转换。如下:(创建类型转换需要注意以下描述)
①创建类型转换:

CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;
CREATE CAST (BIGINT AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS BIGINT) WITH INOUT AS IMPLICIT;

–注:创建cast需要有pg_cast系统表的权限
–注:当创建类型转换使用自动隐式转换的话如果出现多个匹配的转换此时pg会因为不知道选择哪一个去处理类型转换而报错。
–如果出现多个隐式自动转换都匹配此时还是需要手动添加转换以达到效果,或者删除多余的类型转换。在这里插入图片描述

这样我们就解决了上述又不想修改参数,也不想修改xml字段类型的问题。

②查询已存在的转换类型:

SELECT( SELECT typname FROM pg_type WHERE oid = T.castsource ) AS “ castsource”,( SELECT typname FROM pg_type WHERE oid = T.casttarget ) AS “ casttarget”,castcontext,castmethod 
FROMpg_cast AS T

③删除已存在转换类型:

DROP CAST (varchar as bigint);
DROP CAST (bigint as varchar);

上述解决办法适用于一直在pg数据库环境下开发的项目。
四、总结:
开发人员一定要规范开发代码,虽然说有的数据库(指MySQL或Oracle)会给我们优化掉,但是类型还是严格对应,不过PostgregSQL确实和其他两个热门数据库比较还是有很多区别点,开发时需要特别注意,详细区别可见另一篇文章:
《PostgreSQL和MySQL的区别》

在这里插入图片描述

这篇关于No operator matches the given name and argument type(s). You might need to add explicit type casts报错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/324084

相关文章

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Pycharm安装报错:Cannot detect a launch configuration解决办法

《Pycharm安装报错:Cannotdetectalaunchconfiguration解决办法》本文主要介绍了Pycharm安装报错:Cannotdetectalaunchconfigur... 本文主要介绍了Pycharm安装报错:Cannot detect a launch configuratio

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc