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



我需要将十进制/数字数据类型的隐式强制转换为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用作隐藏的系统列。

最新更新