【问题标题】:How to create a cast to oid type in PostgreSQL?如何在 PostgreSQL 中创建转换为 oid 类型?
【发布时间】:2019-12-02 13:47:30
【问题描述】:

我需要为十进制/数字数据类型定义隐式转换为 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 已被弃用且不推荐使用,而且在 PostgreSQL 12 中也对它们进行了重大更改,但我现在确实需要这种解决方法。

【问题讨论】:

    标签: postgresql casting implicit-conversion


    【解决方案1】:

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

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

    这将正确处理错误。

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 2020-03-22
      • 2019-01-09
      • 2011-02-05
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多