【问题标题】:How to check if value exists in PosrgreSQL enum custom type?如何检查 PostgreSQL 枚举自定义类型中是否存在值?
【发布时间】:2022-02-09 20:59:51
【问题描述】:

在我的 PostgreSQL 数据库中,我有一个名为 vegetables_type 的自定义枚举类型。它包含('carrot', 'potato', 'tomato') 值。我的任务是为这种类型添加新的价值。我正在寻找一条 SQL 语句来检查此类型中是否已存在此新值,如果不存在,则添加此值,如果存在,则不执行任何操作。

我找到了SELECT unnest(enum_range(NULL::vegetables_type)); 声明。但我找不到如何对这个结果进行操作——无法应用WHEREINANY 操作。

【问题讨论】:

    标签: javascript node.js postgresql knex.js


    【解决方案1】:

    将对unnest() 的调用移至FROM 子句,然后您可以像使用任何其他表一样使用输出:

    SELECT * 
    FROM unnest(enum_range(NULL::vegetables_type)) as t(name)
    WHERE name::text = 'carrot'
    

    要测试一个值是否存在,你可以使用例如:

    select exists (select *
                   FROM unnest(enum_range(NULL::vegetables_type)) as t(name)
                   WHERE t.name::text = 'new_item')
    

    如果new_item 已经是枚举的成员,则上面将返回true


    但你不需要这么复杂的声明开始。您可以简单地将if not exists 用作 ALTER 语句的一部分:

    alter type vegetables_type add value if not exists 'new_item';
    

    【讨论】:

    • 哇,最后一段带有“如果不存在”的段落是如此简单和酷。谢谢
    猜你喜欢
    • 2015-02-12
    • 2021-05-12
    • 2018-08-27
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2017-10-03
    • 2019-04-10
    相关资源
    最近更新 更多