postgresql 如何将字符串值强制转换为枚举

oewdyzsn  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(4)|浏览(216)

我有一个enum类型的表,我创建了一个函数来向该表添加数据,我希望该函数在接受的内容方面比较宽松,所以我将text作为枚举类型,并希望稍后对其进行强制转换。
下面是枚举:

CREATE TYPE public.enum_log_priority AS ENUM (
    'critical','error','warning','notice','debug'
);

这个函数是:

CREATE OR REPLACE FUNCTION public.log_write(
    _message text,
    _priority text
) RETURNS integer AS
$body$
BEGIN
    _priority = lower(_priority);
    INSERT INTO log (message, priority) VALUES (_message, _priority);

    RETURN 0;
END
$body$
LANGUAGE 'plpgsql';

我知道这行不通:
错误:列“priority”的类型为enum_log_priority,但表达式的类型为text
但我该怎么做呢

brccelvz

brccelvz2#

按如下方式更改函数:

CREATE OR REPLACE FUNCTION public.log_write(
    _message text,
    _priority text
) RETURNS integer AS
$body$
BEGIN
    _priority = lower(_priority);
    INSERT INTO log (message, priority) VALUES (_message, _priority::enum_log_priority);

    RETURN 0;
END
$body$
LANGUAGE 'plpgsql';

|sql fiddle演示|

4dc9hkyq

4dc9hkyq3#

Postgres也支持cast函数:

cast(priority AS enum_log_priority);
vmpqdwk3

vmpqdwk34#

考虑到有时(例如在Prisma原始查询中)需要将枚举类型放在引号内。

'critical'::"enum_log_priority"

相关问题