PostgreSQL自定义semanticversion类型字面量比较报错如何解决
报错原因
排序时左右两侧都是已定义的semanticversion类型值,PostgreSQL可以直接调用复合类型默认的逐字段比较规则完成排序,因此运行正常。
而你写的(1,2,3,'h',1)属于匿名ROW记录类型,PostgreSQL不会自动将其匹配为自定义的semanticversion类型,比较时两个值类型不匹配,就触发了字段类型不一致的报错。
解决方法
最简单的方案是给字面量显式加上类型转换,声明该字面量为semanticversion类型即可:
select * from TABLE where version < (1,2,3,'h',1)::semanticversion;
也可以用标准ROW构造器写法,效果完全一致:
select * from TABLE where version < ROW(1,2,3,'h',1)::semanticversion;
执行后会按照排序时的相同规则完成比较,返回符合预期的结果。
注意:上述代码中的TABLE需替换为你自己的实际表名;另外不建议为了省写转换语句自定义类型隐式转换规则,很容易引发其他场景的类型匹配混乱,显式类型转换是最安全稳定的方案。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

