目录

环境

文档用途

详细信息

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7

版本:5.6.4

文档用途

highgo数据库执行某些隐式转换可能会产生错误,但是在oracle中不会出现。瀚高报错如下:

ERROR:  operator does not exist: integer = text

本文针对上述现象主要介绍:


 

详细信息

1. Postgresql

1.1 PostgreSQL隐式类型转换机制

  select * from t_cast where id = '1';(id为int类型)

未指定类型,'1'会被视为string literal,在PostgreSQL中如果string literal没有指定类型则'1'类型为unknown,PostgreSQL会尝试把1转换为整型进行比较。

  select * from t_cast where id = '1'::text;

指定了数据类型,'1'的类型为text,如果既没有定义cast中int到text转换或者操作符未包含该类型则会报错

1.2 可以进行转换的情形

1.2.1 该类型为pg_operator系统目录中左类型可以匹配的右类型

PostgreSQL根据系统目录中的定义来确定类型D1和类型D2能否执行某个操作O

执行如下语句进行查询操作O为"="二元操作符,左类型为D1,右类型D2可用类型:

  select oprname,oprleft::regtype,oprright::regtype,oprcode from pg_operator where oprname='=' and oprleft::regtype='int'::regtype;

oprleft为左侧类型D1,oprright为右侧可用类型D2如下图:

image.png

1.2.2 在pg_cast系统目录中定义为可相互转换的对象

执行如下语句进行查询int类型已定义的可以转换对象:

  select castsource::regtype,casttarget::regtype,castfunc from pg_cast where castsource::regtype='integer'::regtype;

casttarget类中数据为int已定义的可以转为的对象 如下图:

image.png

所以没有定义operator也没有定义数据类型cast,因此int与text等值比较会报错

更多详细信息请登录【瀚高技术支持平台】查看瀚高技术支持平台 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐