问题现象:
部分EAS Cloud 8.6 或EAS Cloud 8.6.1版本、数据中心是PG库的客户反馈,在打开轻分析,或保存主题、发布主题时报错,如下:
1)新建仪表板报错,报错信息:
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)
分析解答:
在保存或发布主题的时候,字段在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或数据库所属用户执行。
推荐阅读