如何在PostgreSQL中创建转换为oid类型?

如何在PostgreSQL中创建转换为oid类型?,postgresql,casting,implicit-conversion,Postgresql,Casting,Implicit Conversion,我需要为decimal/numeric数据类型定义一个隐式转换为oid类型,以便在查询的where部分使用=运算符,而不添加::符号 阅读这里的文档后,我尝试添加此强制转换,但它仅适用于0到+2147483647 oid,因为PostgreSQL中的int4是有符号的,oid类型是无符号的 CREATE CAST(数值为oid),函数int4(数值)为隐式 我知道OID已被弃用,不推荐使用,而且在PostgreSQL 12中,OID也有一个突破性的变化,但我现在确实需要这个解决方法。您应该使用类

我需要为decimal/numeric数据类型定义一个隐式转换为oid类型,以便在查询的where部分使用=运算符,而不添加::符号

阅读这里的文档后,我尝试添加此强制转换,但它仅适用于0到+2147483647 oid,因为PostgreSQL中的int4是有符号的,oid类型是无符号的

CREATE CAST(数值为oid),函数int4(数值)为隐式


我知道OID已被弃用,不推荐使用,而且在PostgreSQL 12中,OID也有一个突破性的变化,但我现在确实需要这个解决方法。

您应该使用类型输入和输出函数定义该强制转换:

CREATE CAST (numeric AS oid) WITH INOUT AS IMPLICIT;
这将正确处理错误

请注意,在系统类型上添加隐式强制转换可能会破坏类型解析系统的稳定性,从而导致歧义错误。对于
oid
,这可能不是什么大问题

此外,
oid
在PostgreSQL v12中也没有被弃用。已删除的是将
oid
用作隐藏的系统列