Как передать строковое значение в перечисление
У меня есть таблица с типом 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, но выражение имеет тип текста
но как я могу это сделать?
Ответы
Ответ 1
Использовать синтаксис, как показано ниже при вставке
'critical'::enum_log_priority
См. также ссылку на
http://www.postgresql.org/docs/9.1/static/datatype-enum.html
Вставка в пользовательские типы SQL с подготовленными операторами в java
java enum и postgresql enum
Ответ 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-скрипта |