2014-02-21 98 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,因爲將列表的名稱提供給列似乎也是一個問題,儘管沒有顯示錯誤消息。