Что это значит

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';

Запрос покажет, с какими типами аргументов функция есть и в какой схеме.

Что сделать

  1. Привести аргумент к нужному типу: round(avg(x)::numeric, 2), upper(id::text).
  2. Если функции нет в базе, установить расширение (CREATE EXTENSION ...) или указать схему явно.
  3. Если запрос написан под другую СУБД, например в скрипте проверки версии под Aurora, а выполняется на обычном PostgreSQL, исправить запрос, а не базу.