我需要为十进制/数字数据类型到oid类型定义一个隐式转换,以便在查询的where部分中使用=运算符而不添加::表示法。
在这里阅读文档https://www.postgresql.org/docs/11/sql-createcast.html之后,我尝试添加此强制类型转换,但它仅适用于0到+2147483647 oid,因为PostgreSQL中的int4是带符号的,并且oid类型是无符号的
CREATE CAST (numeric AS oid) WITH FUNCTION int4(numeric) AS IMPLICIT;
我知道不建议使用oid,并且不建议使用oid,而且在PostgreSQL 12中,它们已经发生了重大变化,但是我现在确实需要这种解决方法。
您应该使用类型输入和输出函数来定义该类型转换:
CREATE CAST (numeric AS oid) WITH INOUT AS IMPLICIT;
这将正确处理错误。
请注意,在系统类型上添加隐式强制转换可能会破坏类型解析系统的稳定性,因此您会得到有关歧义的错误。使用oid
,这可能不是什么大问题。
此外,PostgreSQL v12中不建议使用oid
。已删除的是将oid
用作隐藏的系统列。