gpt4 book ai didi

sql - PostgreSQL - 检查值是否等于枚举值

转载 作者:行者123 更新时间:2023-12-05 00:48:22 26 4
gpt4 key购买 nike

我有以下枚举声明:
CREATE TYPE known_roles_list AS ENUM ('role1', 'role2')

当数据库执行某个查询时,我希望检查他们是否正在使用这些角色之一执行此操作,如果没有,则让查询通过。类似的东西:

IF current_user NOT IN known_roles_list THEN
RETURN OLD;
END IF;

显然,上面的代码不起作用(引发了运行时比较错误)。 unnest() 也没有枚举值并在其中搜索。

如何进行搜索 - 并查看枚举的 any 值是否与 current_user 值匹配? (current_user 值只是一个示例 - 稍后,我需要将这些枚举值与行值进行比较,由列表示)

谢谢!

最佳答案

您可以使用 enum_range(null::known_roles_list) 来获取枚举的数组列表元素,然后只需使用标准数组运算符。您需要将该数组转换为 name[] 否则它将无法比较 nameknown_roles_list[]

postgres=> SELECT enum_range(null::known_roles_list);
enum_range
---------------
{role1,role2}

postgres=> SELECT current_user;
current_user
--------------
lkaminski

postgres=> SELECT current_user = any(enum_range(null::known_roles_list)::name[]);
?column?
----------
f

postgres=> SELECT 'role2'::name = any(enum_range(null::known_roles_list)::name[]);
?column?
----------
t

枚举函数:https://www.postgresql.org/docs/current/static/functions-enum.html

任何/一些:https://www.postgresql.org/docs/current/static/functions-comparisons.html#id-1.5.8.28.16

关于sql - PostgreSQL - 检查值是否等于枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51924066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com