Главная / Справочник ошибок / PostgreSQL
Нет функции с такими типами аргументов
ERROR: function ... does not exist. HINT: No function matches the given name and argument types
«ERROR: function round(double precision, integer) does not exist» (SQLSTATE 42883) и подсказка «You might need to add explicit type casts» в PostgreSQL: функция есть, но не для этих типов, или её нет в базе и схеме. Как исправить приведением типов.
Что это значит
PostgreSQL ищет функцию по имени и по типам аргументов. Если точного совпадения нет и неявного приведения тоже, приходит эта ошибка. Частые случаи:
round(double precision, integer): округление до знаков есть только дляnumeric, а результат деления илиavgбываетdouble precision;upper(uuid)и другие строковые функции от нестроковых типов;- функция существует, но в схеме, которой нет в
search_path, или в другой базе; - функция расширения, которое в этой базе не установлено.
Как проверить
SELECT n.nspname, p.proname, pg_get_function_identity_arguments(p.oid)
FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname = 'round';
Запрос покажет, с какими типами аргументов функция есть и в какой схеме.
Что сделать
- Привести аргумент к нужному типу:
round(avg(x)::numeric, 2),upper(id::text). - Если функции нет в базе, установить расширение (
CREATE EXTENSION ...) или указать схему явно. - Если запрос написан под другую СУБД, например в скрипте проверки версии под Aurora, а выполняется на обычном PostgreSQL, исправить запрос, а не базу.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать