2013-09-05 17 views
11

Mam tabelę z typem enum i utworzono funkcję dodawania danych do tej tabeli. Chcę, aby ta funkcja była hojna w tym, co akceptować, więc biorę text jako typ wyliczeniowy i chcę go później przesłać.Jak przesłać wartość łańcucha do wyliczenia

Jest to enum:

CREATE TYPE public.enum_log_priority AS ENUM (
    'critical','error','warning','notice','debug' 
); 

I to jest funkcja:

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

wiem, że to nie działa:

ERROR: column "priority" is of type enum_log_priority but expression is of type text

ale jak mogę to zrobić ?

+0

Proszę określić strukturę enum_log_priority ze wszystkich możliwych wartości –

Odpowiedz

2

zmienić funkcję jak to:

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 |

Powiązane problemy