【发布时间】:2011-02-09 18:23:59
【问题描述】:
我在 PostgreSQL / plpgsql 中有一个具有以下签名的函数:
CREATE OR REPLACE FUNCTION user_login(TEXT, TEXT) RETURNS SETOF _get_session AS $$ ... $$
_get_session 是一个视图。从 phpPgAdmin 调用它时该函数工作正常,但是当我从 PHP 调用它时,我收到以下错误:
警告:pg_query() [function.pg-query]:查询失败:错误:类型 “session_ids”不存在 CONTEXT:PL/pgSQL 函数的编译 “user_login”在 /home/sites/blah.com/index.php 第 69 行的第 2 行附近
函数的 DECLARE 部分包含以下变量:
oldSessionId session_ids := $1;
newSessionId session_ids := $2;
域 session_ids 确实存在,并且使用相同域的其他函数在从同一脚本调用时工作。 PHP如下:
$query = "SELECT * FROM $dbschema.user_login('$session_old'::TEXT, '$session'::TEXT)";
$result = pg_query($login, $query);
我在调用函数时也尝试过使用::session_ids 代替::TEXT,但是我收到了同样的错误。
帮助:o(
【问题讨论】:
-
我猜 pg_query 不能解析任意返回类型——它可以处理 TEXT、INT 等,但可能不知道如何处理视图。您是否尝试过“返回记录集”? :|
-
谢谢,我没有,但同样的原则适用于数据库中的所有其他函数。总共有 4 个都返回 SETOF _whatever_view。真的很奇怪。另一个区别是这个函数是由不同的用户运行的(它有权运行所涉及的视图)。我搞不定:o(
标签: php sql database postgresql plpgsql