解决方式
Postgresql8.3以后取消了数据类型隐式转换,因此比较的数据类型需要一致。
AntDB兼容了2种语法模式:默认的postgres和兼容的oracle。
oracle语法模式下,AntDB已经自研兼容了部分数据类型隐式转换的场景,包括该问题的场景已经兼容。
postgres语法模式下,依然会报该错误。
下面给出一个示例说明:
antdb=# \d sy02
Table "public.sy02"
Column | Type | Modifiers
--------+-----------------------+-----------
id | character varying(10) |
antdb=# set grammar TO postgres;
SET
antdb=# select count(*) from sy02 where id=123;
ERROR: operator does not exist: character varying = integer
LINE 1: select count(*) from sy02 where id=123;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
antdb=# set grammar TO oracle;
SET
antdb=# select count(*) from sy02 where id=123;
count
-------
0
(1 row)
原因说明
为了兼容oracle语法,AntDB自研兼容了较大部分的oracle数据类型隐式转换的场景。
建议优先尝试使用oracle语法模式。