PostgreSQL - 返回任何 ENUM 标签的函数

标签 postgresql enums postgresql-9.6

我正在尝试编写一个“通用”函数,它将返回任何枚举的标签(在任何模式中)... 但我运气不佳,因为我不确定参数类型应该是什么......

目标是能够像这样调用函数

SELECT common.get_enum_labels('public.rainbow_colors');
SELECT common.get_enum_labels('audit.user_actions');

这就是我所拥有的

CREATE OR REPLACE FUNCTION common.get_enum_labels(enum_name regtype)
RETURNS SETOF text AS
$$
BEGIN
  EXECUTE format('SELECT unnest(enum_range(NULL::%s))::text AS enum_labels ORDER BY 1', enum_name);
END;
$$
LANGUAGE plpgsql
STABLE
PARALLEL SAFE
;

任何提示将不胜感激

最佳答案

参数类型应该是regtype,不要忘记从函数返回一些东西

CREATE OR REPLACE FUNCTION get_enum_labels(enum_name regtype)
RETURNS SETOF text AS
$$
BEGIN
    RETURN QUERY
        EXECUTE format('SELECT unnest(enum_range(NULL::%s))::text ORDER BY 1', enum_name);
END;
$$
LANGUAGE plpgsql

关于PostgreSQL - 返回任何 ENUM 标签的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981159/

相关文章:

postgresql - Postgres 错误 : Role <username> doesn't exist, 角色 <用户名> 已经存在

postgresql - 如何在不删除现有数据的情况下升级 Docker Postgresql?

python-3.x - 如何使用 psycopg2.extras.execute_values 更新 ON CONFLICT

java - 是否可以将 Java-Enum 作为参数从 Cucumber 功能文件传递(以更文本友好的方式)?

json - Postgres : Create jsonb object with given set of keys and a default value

python psycopg2查询错误时间戳没有时区

postgresql - 数据库备份无法使用数据库管理器

postgresql - 从另一个容器访问 Docker postgres 容器

Swift 检测碰撞和设置枚举

javascript - js-doc/google-closure-compiler 如何记录传递的枚举对象本身?