0
これは単純だと思っていましたが、複数の組み合わせを試しましたが、PostgreSQLでそれらを受け入れることができません。それは、一致する関数がないと主張していますが、リストされた型は(以下の例に見られるように)私の定義された関数と明確に一致しています。このPostgres関数をカスタム列挙型入力と呼ぶにはどうしたらいいですか?
List of data types
Schema | Name | Internal name | Size | Elements | Access privileges | Description
--------+--------+---------------+------+----------+-------------------+-------------
public | levels | levels | 4 | debug +| |
| | | | info +| |
| | | | warn +| |
| | | | critical | |
CREATE FUNCTION public."logEvent"(IN in_type text,IN in_priority public.levels,IN in_message text)
RETURNS void
LANGUAGE 'sql'
NOT LEAKPROOF
AS $function$
INSERT INTO public.log (type,priority,message) VALUES (in_type, in_priority, in_message);
$function$;
失敗したクエリ:
SELECT 1 FROM public.logEvent('test'::text,'debug'::public.levels,'test from sql prompt'::text);
ERROR: function public.logevent(text, levels, text) does not exist
LINE 1: SELECT 1 FROM public.logEvent('test'::text,'debug'::public.l...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
代替関数の定義:これは関数呼び出しを作成、実行しようとすると私は同じエラーを取得:
CREATE FUNCTION public."logEvent"(IN in_type text, IN in_priority text, IN in_message text)
RETURNS boolean
LANGUAGE 'sql'
NOT LEAKPROOF
AS $function$
SELECT public.logEvent(in_type, CAST(lower(in_priority) AS public.levels), in_message);
$function$;
私はそれを知りませんでした(mySQLから来た)が、それは私の問題を説明して解決します。 create table構文はpgAdminによって生成されました。もし私が手で書いたのであれば、引用符を省略して後でさらに混乱するかもしれません;-)私は自分の関数の名前を変更し、to_the_underscore_namingの規則に切り替えます。 – Digicrat