хранимая процедура postgres и php - PullRequest
0 голосов
/ 03 октября 2011

У меня сейчас проблемы с хранимой процедурой.

У меня есть эта хранимая процедура в схеме main :

register(LOGIN_ID varchar, PASSWORD varchar)

Я пытаюсь вызвать это в запросе, но мне не повезло,

$query = "SELECT main.register('test','pass123')";
$run = $pg_query($conn, $query);

Возвращает ошибку, что Никакая функция не соответствует заданному имени и типу аргумента. Возможно, вам потребуется добавить явные приведения типов.

Любые идеи, пожалуйста. Спасибо.

1 Ответ

2 голосов
/ 03 октября 2011

Попробуйте явное приведение:

$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;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...