【问题标题】:Extracting results from a SELECT * in node pg从节点 pg 中的 SELECT * 中提取结果
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多