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

Postgresql 如何将字符串值强制转换为枚举,postgresql,casting,enums,Postgresql,Casting,Enums,我有一个带有enum类型的表,我创建了一个函数来向该表添加数据。我希望该函数在接受什么方面是慷慨的,因此我将text作为枚举类型,并希望稍后对其进行强制转换 这是枚举: CREATE TYPE public.enum_log_priority AS ENUM ( 'critical','error','warning','notice','debug' ); 这就是功能: CREATE OR REPLACE FUNCTION public.log_write( _message

我有一个带有
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\u log\u priority,但表达式的类型为text


但是我如何才能做到这一点呢?

在插入过程中使用如下语法

'critical'::enum_log_priority 
请参阅一些链接以及


如下更改您的功能:

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';

请使用所有可能的值指定枚举日志优先级的结构