sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL-tillstånd:42883, Ingen funktion matchar givna namn och argumenttyper. Men den funktionen finns faktiskt

Antagligen en fråga om schema kontra schema search_path . Funktionen skapas i standardschemat för den skapande användaren. Om det inte finns i search_path för den aktuella användaren är den inte synlig.

Detaljer:

Vanligtvis skulle du skapa offentliga funktioner i schemat public och ha det schemat i everbodys 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;

Schema-kvalificering behövs endast om public är inte standardschemat ändå.

Även din GRANT kommandon är meningslösa. EXECUTE privilegium för funktioner ges till public som standard. Och när du beviljar public , det finns inget behov av att bevilja andra användare. Särskilt inte till postgres , som är OWNER i alla fall och en superanvändare också. Handboken:

Du måste bevilja USAGESCHEMA där funktionen skapas. public schemat beviljar USAGE till public (alla) som standard.

Bortsett från 1

Castar till integer ändrar ingenting här eftersom en numerisk bokstav utan decimalpunkt tvingas automatiskt till heltal. Detaljer om konstanter i manualen.

Åt sidan 2

Överväg snarast att uppdatera till en aktuell version av Postgres. Din programvara är helt föråldrad.




  1. persist java LocalDate i MySQL

  2. Tom sträng som infogar en nolla, inte en noll

  3. SQLSTATE[42000]:Syntaxfel eller åtkomstöverträdelse:1066 Inte unik tabell/alias på relation

  4. HA för MySQL och MariaDB - Jämför Master-Master-replikering med Galera Cluster