おそらくスキーマとスキーマの問題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に更新することを早急に検討してください。ソフトウェアは完全に古くなっています。