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

SQL-tilstand:42883, Ingen funktion matcher det angivne navn og argumenttyperne. Men den funktion eksisterer faktisk

Mest sandsynligt et spørgsmål om skema vs. skema search_path . Funktionen oprettes i standardskemaet for den oprettende bruger. Hvis det ikke er i search_path af den aktuelle bruger, er den ikke synlig.

Detaljer:

Typisk vil du oprette offentlige funktioner i skemaet public og har det skema 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;

Skema-kvalifikation er kun nødvendig, hvis public er alligevel ikke standardskemaet.

Også din GRANT kommandoer giver ingen mening. EXECUTE privilegium til funktioner er givet til public som standard. Og når du giver til public , er der ingen grund til at give til andre brugere. Især ikke til postgres , som er OWNER alligevel og også en superbruger. Manualen:

Du skal give USAGESCHEMA hvor funktionen er oprettet. public skemaet giver USAGE til public (alle) som standard.

Bortset fra 1

Caster til integer ændrer ikke noget her, fordi en numerisk bogstavelig uden decimaltegn tvinges automatisk til heltal. Detaljer om konstanter i manualen.

Til side 2

Overvej hurtigt at opdatere til en aktuel version af Postgres. Din software er fuldstændig forældet.




  1. ORA-00604 ORA-12705

  2. SUBSTRING Kommando i SQL:A Primer

  3. Smukke blokke af kedelplade

  4. yii-relation for fremmednøgler med flere kolonner