Най-вероятно въпрос на схема срещу схема search_path . Функцията се създава в схемата по подразбиране на създаващия потребител. Ако това не е в search_path на текущия потребител, не се вижда.
Подробности:
Обикновено създавате публични функции в схемата public и да имате тази схема в 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. Вашият софтуер е напълно остарял.