sql >> Database >  >> RDS >> PostgreSQL

SQL-status:42883, Geen enkele functie komt overeen met de opgegeven naam en argumenttypes. Maar die functie bestaat echt

Hoogstwaarschijnlijk een kwestie van schema versus schema search_path . De functie is gemaakt in het standaardschema van de aanmakende gebruiker. Als dat niet in het search_path staat van de huidige gebruiker, is het niet zichtbaar.

Details:

Normaal gesproken maakt u openbare functies aan in het schema public en heb dat schema in ieders 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;

Schemakwalificatie is alleen nodig als public is sowieso niet het standaardschema.

Ook uw GRANT commando's hebben geen zin. De EXECUTE privilege voor functies wordt verleend aan public standaard. En zodra je aan public verleent, , is het niet nodig om andere gebruikers toe te kennen. Vooral niet om postgres , wat de OWNER . is hoe dan ook en ook nog een superuser. De handleiding:

U moet wel USAGE . toekennen op het SCHEMA waar de functie wordt gemaakt. De public schema verleent USAGE naar public (iedereen) standaard.

opzij 1

Casten naar integer verandert hier niets omdat een numerieke letterlijke zonder decimale punt automatisch tot integer wordt gedwongen. Details over constanten in de handleiding.

opzij 2

Overweeg dringend te updaten naar een actuele versie van Postgres. Uw software is volledig verouderd.




  1. SQL Server AlwaysOn-beschikbaarheidsgroepen:installatie en configuratie. Deel 2

  2. Hoe maak ik een veilige query voor het uitvoeren van een bulkinvoeging in MySQL met MySQLCommand in C# zonder een opgeslagen proces te gebruiken?

  3. Magento BestSeller-module - Configureerbare producten optellen en weer toevoegen

  4. SQL Hoe uit een andere tabel optellen en in een andere tabel invoegen