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

问题描述 投票:1回答:1

我需要为十进制/数字数据类型到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中,它们已经发生了重大变化,但是我现在确实需要这种解决方法。

postgresql casting implicit-cast
1个回答
0
投票

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

CREATE CAST (numeric AS oid) WITH INOUT AS IMPLICIT;

这将正确处理错误。

请注意,在系统类型上添加隐式强制转换可能会破坏类型解析系统的稳定性,因此您会得到有关歧义的错误。使用oid,这可能不是什么大问题。

此外,PostgreSQL v12中不建议使用oid。已删除的是将oid用作隐藏的系统列。

© www.soinside.com 2019 - 2024. All rights reserved.