如果有接触过其他数据库,诸如MySQL、Oracle等都是默认对数据类型进行了隐式的转换,在其他数据库varchar等字符串类型和数字可以进行自动的隐式转换,但是PG确没有这么处理,那么有没有办法让PG也实现这个功能呢?答案是肯定的,经过查看官方提供的文档,发现可以通过PG的自定义类型转换定义自己想要的隐式类型转换,下面给大家提供一个简单地示例具体的应用可以去查看官方的文档,场景还是上面的简单场景。
--创建类型转换
--注:创建cast需要有pg_cast系统表的权限
--注:当创建类型转换使用自动隐式转换的话如果出现多个匹配的转换此时pg会因为不知道选择哪一个去处理类型转换而报错,
--如果出现多个隐式自动转换都匹配此时还是需要手动添加转换以达到效果,或者删除多余的类型转换
CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;
CREATE CAST (BIGINT AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS BIGINT) WITH INOUT AS IMPLICIT;
如果想查看自己创建的cast可以用下面的SQL查看
--查询当前的类型转换
--这个查询是当前所有的CAST,具体字段的定义同样可以参阅PG数据库官方文档里的描述
select
(select typname from pg_type where oid = t.castsource) as "castsource",
(select typname from pg_type where oid = t.casttarget) as "casttarget",
castcontext,
castmethod
from pg_cast as t
DROP CAST (VARCHAR as INTEGER);
DROP CAST (INTEGER as VARCHAR);
评论区