31

型を含むテーブルがあり、enumそのテーブルにデータを追加する関数を作成しました。私はその関数が何を受け入れるかを寛大にしたいのでtext、列挙型として a を取り、後でキャストしたいと考えています。

これは列挙型です:

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 型です

しかし、どうすればこれを行うことができますか?

4

3 に答える 3

48

挿入時に以下のような構文を使用します

'critical'::enum_log_priority 

リンク先もありますのでご覧ください

http://www.postgresql.org/docs/9.1/static/datatype-enum.html

Javaで準備されたステートメントを使用してカスタムSQLタイプに挿入する

Java列挙型およびpostgresql列挙型

于 2013-09-05T09:17:02.547 に答える
5

関数を次のように変更します。

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 フィドルのデモ |

于 2013-09-05T12:06:20.893 に答える