2014-02-21 99 views
3

我已经一个PostgreSQL存储的函数定义如下:提取结果

SELECT SessionGet('SID-1'::varchar); 

session表:

CREATE OR REPLACE FUNCTION SessionGet(
    sid   varchar) 
    RETURNS "SESSION" AS $$ 
    SELECT * FROM "SESSION" WHERE "SESSION_ID" = sid; 
$$ LANGUAGE sql; 

我使用PG模块调用它从节点被定义为:

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> 0result.rows[0][0]是不确定的。我如何从返回的行中检索字段值?

+0

你确定你的函数返回一个非空值吗?使用相同的输入在'psql'中调用它并查看。 –

+0

当我从pgAdmin'sql窗口调用函数时,得到:“(SID-1,{},10)”。 May节点的pg模块不能正确处理这个结果... – JVerstry

+0

当我运行时:SELECT * FROM“SESSION”WHERE“SESSION_ID”='SID-1';结果出现在3个不同的colums中,而不是(,,) – JVerstry

回答

0

我已经通过发送SQL语句(SELECT * FROM "SESSION" WHERE "SESSION_ID" = '...';)而不是依赖存储的函数来解决我的问题。

我也将SESSION列的名称更改为SESSION_JS,因为将列表的名称提供给列似乎也是一个问题,尽管没有显示错误消息。