Nejpravděpodobněji je to otázka schématu vs. schéma search_path
. Funkce je vytvořena ve výchozím schématu vytvářejícího uživatele. Pokud to není v search_path
aktuálního uživatele, není vidět.
Podrobnosti:
Obvykle byste vytvořili veřejné funkce ve schématu public
a mít toto schéma v každé 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;
Kvalifikace schématu je nutná pouze v případě, že je public
stejně není výchozí schéma.
Také váš GRANT
příkazy nedávají smysl. EXECUTE
oprávnění pro funkce je uděleno public
ve výchozím stavu. A jakmile udělíte public
, není třeba udělovat dalším uživatelům. Zvláště ne na postgres
, což je OWNER
stejně a superuživatel taky. Příručka:
Musíte udělit USAGE
na SCHEMA
kde je funkce vytvořena. public
schéma uděluje USAGE
public
(všichni) ve výchozím nastavení.
Odesílání do integer
zde nic nemění, protože číselný literál bez desetinné čárky je automaticky vynucen na celé číslo. Podrobnosti o konstantách v příručce.
Urychleně zvažte aktualizaci na aktuální verzi Postgresu. Váš software je zcela zastaralý.