Попробуйте явное приведение:
$query = "SELECT main.register('test'::varchar,'pass123'::varchar)";
Редактировать:
Диагностируйте вашу проблему с помощью этого запроса и сообщите выходной результат.
Найдите функции во всех схемах в вашей базе данных:
SELECT n.nspname, p.proname, pg_catalog.pg_get_function_arguments(p.oid) as params
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname ~~* '%my_function_name_here%'
AND pg_catalog.pg_function_is_visible(p.oid);
Используйте ту же роль для подключения!Демонстрационный вывод:
nspname | proname | params
---------+----------+----------------------------------------
public | register | string text
public | register | login_id varchar, password varchar
main | register | string text, form text, maxlen integer
Вот вывод Ди:
nspname | proname | params
---------+----------+----------------------------------------
(0 rows)
Очевидно, что ваша роль не может видеть функции с именем register
с какими-либо параметрами в любой схеме.Попробуйте так же, как superuser - postgres
в большинстве случаев.
- Если вы все еще ничего не видите, функция просто отсутствует.Вам нужно создать его, или у вас где-то есть опечатка.
Если вы видите его как суперпользователя, то роли, с которой вы соединяетесь, не хватает необходимых привилегий, скорее всего, в схеме main
.В этом случае лечение будет (как суперпользователь или владелец схемы main
):
GRANT USAGE ON SCHEMA main TO my_role;