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ですが、式はタイプtextです
しかし、どうすればこれを行うことができますか?
挿入時に以下のような構文を使用します
'critical'::enum_log_priority
リンクもご覧ください
http://www.postgresql.org/docs/9.1/static/datatype-enum.html
次のように関数を変更します。
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';