おそらくスキーマとスキーマの問題search_path
。関数は、作成ユーザーのデフォルトスキーマで作成されます。それがsearch_path
にない場合 現在のユーザーの場合、表示されません。
詳細:
通常、スキーマpublic
でパブリック関数を作成します そして、そのスキーマをeverbodyのsearch_path
に入れます 。
CREATE OR REPLACE FUNCTION public.fun_validatepost(integer, integer)
RETURNS integer AS
$BODY$
...
$BODY$ LANGUAGE plpgsql;
ALTER FUNCTION public.fun_validatepost(integer, integer) OWNER TO postgres;
スキーマ修飾は、public
の場合にのみ必要です とにかくデフォルトのスキーマではありません。
また、GRANT
コマンドは意味がありません。 EXECUTE
関数の権限はpublic
に付与されます デフォルトでは。そして、public
に付与すると 、他のユーザーに付与する必要はありません。特にpostgres
ではありません 、これはOWNER
です とにかくスーパーユーザーも。 マニュアル:
USAGE
を付与する必要があります SCHEMA
で 関数が作成される場所。 public
スキーマはUSAGE
を付与します public
へ (全員)デフォルトで。
integer
へのキャスト 小数点のない数値リテラルは自動的に整数に強制変換されるため、ここでは何も変更されません。 マニュアルの定数の詳細。
現在のバージョンのPostgresに更新することを早急に検討してください。ソフトウェアは完全に古くなっています。