sql >> Base de Datos >  >> RDS >> PostgreSQL

Estado de SQL:42883, ninguna función coincide con el nombre dado y los tipos de argumento. Pero esa función realmente existe.

Lo más probable es que sea una cuestión de esquema frente a esquema search_path . La función se crea en el esquema predeterminado del usuario creador. Si eso no está en search_path del usuario actual, no es visible.

Detalles:

Por lo general, crearía funciones públicas en el esquema public y tener ese esquema en la 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;

La calificación de esquema solo es necesaria si public no es el esquema predeterminado de todos modos.

Además, su GRANT los comandos no tienen sentido. El EXECUTE el privilegio de las funciones se otorga a public por defecto. Y una vez que otorgas a public , no hay necesidad de otorgar a otros usuarios. Especialmente no para postgres , que es el OWNER de todos modos y un superusuario, también. El manual:

Necesita otorgar USAGE en el SCHEMA donde se crea la función. El public el esquema otorga USAGE a public (todos) por defecto.

Aparte 1

Conversión a integer no cambia nada aquí porque un literal numérico sin punto decimal se convierte en entero automáticamente. Detalles sobre constantes en el manual.

Aparte 2

Considere urgentemente actualizar a una versión actual de Postgres. Su software está completamente desactualizado.