PostgreSQL中RegExp类型无法序列化导致SQL查询失败求助
解决RegExp类型无法序列化的SQL查询问题
原始SQL语句
select SUM(t138_0."mocallminutes") f_0 from table1 where regexp_like(t138_0."cosid", (select extra1 from table2 where pkid = 1 ));
错误信息
org.jkiss.dbeaver.model.exec.DBCException: SQL错误 [65536]: 查询失败 (#20230324_051519_01491_fsvh6): RegExp类型无法序列化
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.nextRow(JDBCResultSetImpl.java:183)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.fetchQueryData(SQLQueryJob.java:827)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:632)
问题原因
子查询返回的extra1字段值被识别为RegExp对象而非字符串,导致数据库驱动尝试序列化该对象时失败。
解决办法
- 强制将子查询返回的正则表达式转为字符串类型,修改后的SQL如下:
select SUM(t138_0."mocallminutes") f_0 from table1 where regexp_like(t138_0."cosid", (select CAST(extra1 AS VARCHAR) from table2 where pkid = 1 ));
- 若上述方法无效,可先手动查询出
table2中pkid=1对应的extra1值,将其作为字符串直接写入regexp_like的第二个参数中。 - 检查
table2的extra1字段类型,若存储的是RegExp对象而非字符串,建议修改字段类型为字符串类型,从根源避免类型转换问题。
内容的提问来源于stack exchange,提问作者Anil kumar
相关产品推荐
相关产品推荐

