Как передать строковое значение в перечисление

У меня есть таблица с типом 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, но выражение имеет тип текста

но как я могу это сделать?

Ответ 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-скрипта |