31

我有一个带有enum类型的表,我创建了一个函数来向该表添加数据。我希望该函数能够慷慨地接受什么,所以我将 atext作为枚举类型并希望稍后再转换它。

这是枚举:

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

我知道这不起作用:

错误:列“优先级”是 enum_log_priority 类型,但表达式是文本类型

但我该怎么做呢?

4

3 回答 3

48

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

'critical'::enum_log_priority 

请同时查看一些链接

http://www.postgresql.org/docs/9.1/static/datatype-enum.html

在 java 中使用准备好的语句插入自定义 SQL 类型

java枚举和postgresql枚举

于 2013-09-05T09:17:02.547 回答
5

像这样改变你的功能:

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 小提琴演示 |

于 2013-09-05T12:06:20.893 回答
0

Postgres 也支持 cast 函数:

cast(priority AS enum_log_priority);
于 2021-12-06T14:59:38.343 回答