PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Stato SQL:42883, nessuna funzione corrisponde al nome specificato e ai tipi di argomento. Ma quella funzione esiste davvero

Molto probabilmente una questione di schema vs. schema search_path . La funzione viene creata nello schema predefinito dell'utente che la crea. Se non è nel search_path dell'utente corrente, non è visibile.

Dettagli:

In genere, creeresti funzioni pubbliche nello schema public e avere quello schema nel search_path di tutti .

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 qualificazione dello schema è necessaria solo se public comunque non è lo schema predefinito.

Inoltre, il tuo GRANT i comandi non hanno senso. Il EXECUTE il privilegio per le funzioni è concesso a public per impostazione predefinita. E una volta che concedi a public , non è necessario concedere ad altri utenti. Soprattutto non per postgres , che è il OWNER comunque e anche un superutente. Il manuale:

Devi concedere USAGE sullo SCHEMA dove viene creata la funzione. Il public lo schema concede USAGE a public (tutti) per impostazione predefinita.

A parte 1

Trasmetti a integer non cambia nulla qui perché un valore letterale numerico senza punto decimale viene forzato automaticamente a un intero. Dettagli sulle costanti nel manuale.

A parte 2

Considera urgentemente l'aggiornamento a una versione corrente di Postgres. Il tuo software è completamente obsoleto.