【发布时间】:2014-02-21 10:53:10
【问题描述】:
我有一个 Postgresql 存储函数,定义如下:
CREATE OR REPLACE FUNCTION SessionGet(
sid varchar)
RETURNS "SESSION" AS $$
SELECT * FROM "SESSION" WHERE "SESSION_ID" = sid;
$$ LANGUAGE sql;
我使用 PG 模块从节点调用它:
SELECT SessionGet('SID-1'::varchar);
session 表定义为:
CREATE TABLE "SESSION"
(
"SESSION_ID" character varying NOT NULL DEFAULT ''::character varying,
"SESSION" json NOT NULL DEFAULT '{}'::json,
"LAST_UPDATE" bigint DEFAULT 0,
CONSTRAINT "SESSION_PK" PRIMARY KEY ("SESSION_ID")
)
WITH (
OIDS=FALSE
);
我正在尝试检索返回的结果,如下所示:
client.query(sql, function(err, result) {
done(); // Releasing connection to the pool
if ( err ) {
callback(err);
} else if ( result.rows.length > 0 ) {
var ttmp = result.rows[0];
var tmp1 = ttmp[0];
console.log("Res[0]: " + tmp1);
callback(err,result.rows[0]);
} else {
callback(err);
}
});
虽然result.rows.length 是> 0,但result.rows[0][0] 是未定义的。如何从返回的行中检索字段值?
【问题讨论】:
-
你确定你的函数返回一个非空值吗?使用相同的输入在
psql中调用它并查看。 -
当我从 pgAdmin 的 sql 窗口调用函数时,我得到:“(SID-1,{},10)”。可能节点的 pg 模块没有正确处理这个结果...
-
当我运行时:SELECT * FROM "SESSION" WHERE "SESSION_ID" = 'SID-1';结果出现在 3 个不同的列中,而不是 (,,)
-
啊,你需要运行
SELECT * FROM SessionGet('SID-1'::varchar);才能得到正确的答案。 -
我可以测试它,你是对的。这也是一个重复的问题。
标签: javascript node.js postgresql-9.2 stored-functions