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';
请使用所有可能的值指定枚举日志优先级的结构