2013-09-05 4 views
11

ich eine Tabelle mit einem enum Typ in ihm ENUM und habe ich eine Funktion, um Daten in der diese Tabelle. Ich mag diese Funktion großzügig sein, was zu akzeptieren, so nehme ich ein text als Aufzählungstyp und will es später werfen.Wie String-Wert zu werfen

Dies ist die Enum:

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

Und dies ist die Funktion:

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

Ich weiß, dass dies nicht funktioniert:

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

aber wie kann ich dies tun ?

+0

Bitte geben Sie die Struktur von enum_log_priority mit allen möglichen Werten –

Antwort

2

Änderung Ihrer Funktion wie dies:

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 |