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

时间:2013-09-05 08:52:24

标签: 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 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

但我怎么能这样做?

2 个答案:

答案 0 :(得分:24)

答案 1 :(得分:2)

改变你的功能:

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 demo |