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ý.