Provavelmente uma questão de esquema vs. esquema
search_path
. A função é criada no esquema padrão do usuário criador. Se não estiver no search_path
do usuário atual, não é visível. Detalhes:
Normalmente, você criaria funções públicas no esquema
public
e ter esse esquema no search_path
de todos . 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;
A qualificação de esquema só é necessária se
public
não é o esquema padrão de qualquer maneira. Além disso, seu
GRANT
comandos não fazem sentido. O EXECUTE
privilégio para funções é concedido a public
por padrão. E assim que você conceder a public
, não há necessidade de conceder a outros usuários. Especialmente para não postgres
, que é o OWNER
de qualquer maneira e um superusuário também. O manual:
Você precisa conceder
USAGE
no SCHEMA
onde a função é criada. O public
esquema concede USAGE
para public
(todos) por padrão. Além 1
Transmitindo para
integer
não muda nada aqui porque um literal numérico sem ponto decimal é forçado a inteiro automaticamente. Detalhes sobre constantes no manual.
Além 2
Considere urgentemente atualizar para uma versão atual do Postgres. Seu software está completamente desatualizado.