Най-вероятно въпрос на схема срещу схема 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. Вашият софтуер е напълно остарял.