PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Състояние на SQL:42883, нито една функция не съответства на даденото име и типове аргументи. Но тази функция действително съществува

Най-вероятно въпрос на схема срещу схема search_path . Функцията се създава в схемата по подразбиране на създаващия потребител. Ако това не е в search_path на текущия потребител, не се вижда.

Подробности:

Обикновено създавате публични функции в схемата public и да имате тази схема в 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;

Квалификацията на схемата е необходима само ако е public така или иначе не е схемата по подразбиране.

Също така, вашият GRANT командите нямат смисъл. EXECUTE привилегия за функции се предоставя на public по подразбиране. И след като предоставите на public , няма нужда да предоставяте на други потребители. Особено не към postgres , който е OWNER така или иначе и суперпотребител също. Ръководството:

Трябва да предоставите USAGE на SCHEMA където се създава функцията. public схемата предоставя USAGE до public (всички) по подразбиране.

Настрана 1

Прехвърляне към integer не променя нищо тук, защото числовият литерал без десетична запетая се принуждава автоматично да бъде цяло число. Подробности за константите в ръководството.

Настрана 2

Спешно обмислете актуализиране до текуща версия на Postgres. Вашият софтуер е напълно остарял.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Общо... с обрат

  2. Django и PostgreSQL - стойността е твърде дълга за променлив тип знак (512)

  3. Оптимизиране на GROUP BY + COUNT DISTINCT на невложена jsonb колона

  4. ГРУПИРАНЕ ПО последователни дати, разделени с пропуски

  5. Използване на анотация на Django Window в комбинация с различна клауза