【轻分析】PG库:保存或发布主题时报错,提示数据类型不匹配原创
金蝶云社区-Jasmine_wzw
Jasmine_wzw
1人赞赏了该文章 1,589次浏览 未经作者许可,禁止转载编辑于2022年09月18日 11:51:42

问题现象:

部分EAS Cloud 8.6 或EAS Cloud 8.6.1版本、数据中心是PG库的客户反馈,在打开轻分析,或保存主题、发布主题时报错,如下:

1)新建仪表板报错,报错信息:

image.png

com.kingdee.bos.qing.manage.exception.ThemeManagementException: org.postgresql.util.PSQLException: ERROR: column 'fisdelete' is of type integer but expression is of type character varying Hint: You will need to rewrite or cast the expression. Position: 167at com.kingdee.bos.qing.manage.domain.AbstractThemeManageDomain.saveOrUpdateTheme(AbstractThemeManageDomain.java:569)


2)数据分析发布报错,报错信息:

com.kingdee.bos.qing.publish.exception.PublishException: org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = character varying

  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

  Position: 47

at com.kingdee.bos.qing.publish.domain.AbstractPublishManageDomain.savePublishInfo(AbstractPublishManageDomain.java:178)

image.png


分析解答:

在保存或发布主题的时候,字段在JAVA代码中提交的是字符串类型,但pg数据库里面该字段是int类型,导致出现转换数据类型的异常提示。

其它数据库MS SQLServer、Oracle等都是默认对数据类型进行了隐式的转换,在其它数据库varchar等字符串类型和数字可以进行自动的隐式转换,但是PG确没有这么处理。

金蝶EAS Cloud 系统管理员手册有说明,支持华为云 RDS PostgreSQL增强版。非EAS Cloud 8.6 公有云客户的生产库,PG库可能不是该版本,所以可能存在上述问题,可以通过自定义类型转换定义自己想要的隐式类型转换,解决类型不匹配的问题。如下面脚本是字符串类型和整形进行自动的隐式转换:

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

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

说明:需要用root或数据库所属用户执行。

赞 1