我需要将十进制/数字数据类型的隐式强制转换为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;
我知道 oids 已被弃用且不推荐使用,并且在 PostgreSQL 12 中也对它们进行了重大更改,但我现在确实需要这种解决方法。
您应该使用输入和输出函数类型定义该转换:
CREATE CAST (numeric AS oid) WITH INOUT AS IMPLICIT;
这将正确处理错误。
请注意,在系统类型上添加隐式强制转换可能会破坏类型解析系统的稳定性,从而获得有关歧义的错误。有了oid
,这可能不是什么大问题。
此外,oid
在PostgreSQL v12中未被弃用。已删除的是将oid
用作隐藏的系统列。