我正在使用ppas9.3(oracle兼容),我想进行转换,以便它只影响一侧。 我想要的是,我想要一个数据类型,它可以在插入和比较期间接受整数和布尔值,但没有取得任何成功,正在发生的主要问题是: 最初他们接受这些价值观:
In Postgresql:-
For Integer type datatype:-
insert into ask(aint) values(1,'1') working
insert into ask(aint) values(true) not working
select * from ask where aint=1,'1',true; working
*For smallint type datatype:-
insert into ask(asmall) values(1,'1',true); working
select * from ask where asmall = 1,'1' working
select * from ask where asmall = true not working
For boolean type datatype:-
insert into ask(abool) values(1) not working
insert into ask(abool) values(true) working
select * from ask where abool=1,true working
进行内部投射后,意味着更新'整数'在比较时接受' true'(布尔)'整数'专栏完全恢复并开始工作与' smallint'对于' smallint'对于'布尔'也是如此。
所以我的问题是"Is there any internal casting is available in postgresql 9.3 so that it can affect only one side means either at the time of 'insertion' or at the time of 'comparison'"
。所以,如果您有任何此类技术,请分享。谢谢。
答案 0 :(得分:3)
如相关答案所述:
Generate series of dates - using date type as input
有三种类型的演员。您的来源和目标类型的注册演员必须是“分配”(a
)或“隐式”(i
)才能在VALUES
INSERT
表达式中使用言。
正如您在system catalog pg_cast
中看到的那样,从boolean
到integer
的演员表仅定义为“显式”(e
):
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
结果:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
您必须更改castcontext
才能使其正常工作 - 您可以以超级用户身份执行此操作。这种异域策略没有“ALTER CAST”声明,所以你必须直接UPDATE
。
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
但是,每个演员阵容的预定义演员上下文都有充分的理由。篡改系统目录不是你应该轻易做的事情。在这种特殊情况下,当Postgres必须选择匹配的演员时,它可能会使决策失衡。喜欢从一组重载函数中挑选......
integer -> boolean
,int2 -> boolean
,boolean -> int2
等的类似程序
答案 1 :(得分:1)