存储过程postgres和PHP

时间:2011-10-03 16:44:39

标签: php postgresql stored-procedures

我目前在存储过程方面遇到了麻烦。

我有这个存储过程,在架构 main 下:

register(LOGIN_ID varchar, PASSWORD varchar)

我试图在查询中调用它但我没有运气,

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

这将返回 没有函数与给定名称和参数类型匹配的错误。您可能需要添加显式类型转换。

任何见解请。感谢。

1 个答案:

答案 0 :(得分:2)

尝试显式演员:

$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

这是Dee的输出:

 nspname |  proname | params
---------+----------+----------------------------------------
 (0 rows)

显然,您的角色无法在任何架构中看到名称register的任何参数和任何参数。在大多数情况下,请尝试与超级用户postgres相同的操作。

  • 如果你什么都没看到,那么这个功能就不存在了。你需要创建它,或者你在某处有拼写错误。
  • 如果您将其视为超级用户,则您要连接的角色缺少必要的权限,很可能是在架构main上。在这种情况下,固化将是(作为模式main的超级用户或所有者):

    GRANT USAGE ON SCHEMA main TO my_role;