NodeJS和PostgreSQL函数返回元组,而不是行

时间:2018-01-12 08:29:38

标签: sql node.js postgresql plpgsql

我正在运行PostgreSQL和NodeJS。

在PostgreSQL中,我有一个自定义函数dummy

... RETURNS RECORD AS $$
    ...
    DECLARE ret RECORD
    ...
    RETURN ret;

  END;
$$ LANGUAGE plpgsql;

在NodeJS中,这将返回tuple,作为string

(x,y,z)

所以我必须手动拆分字符串并阅读部分...... 是否有可能让PostgreSQL将tuple作为row或类似内容返回,以便我可以在NodeJS中使用data.xdata.ydata.z

1 个答案:

答案 0 :(得分:4)

FN():

t=# create or replace function f() returns record as $$ declare ret record; begin for ret in (select oid::int,datname::text from pg_database limit 1) loop return ret; end loop; end; $$ language plpgsql;
CREATE FUNCTION

你的电话:

t=# select f();
        f
------------------
 (13505,postgres)
(1 row)

预期电话:

t=# select * from f() as r(o int,n text);
   o   |    n
-------+----------
 13505 | postgres
(1 row)

如果你想预先定义要隐式调用的记录结构,你可以创建一个虚拟fn():

t=# create or replace function dummy() returns table (a int,b text) as $$ begin return query select * from f() as r(o int,n text); end; $$ language plpgsql;
CREATE FUNCTION
t=# select * from dummy();
   a   |    b
-------+----------
 13505 | postgres
(1 row)

如果你想避免FROM

t=# select (dummy()).*;
   a   |    b
-------+----------
 13505 | postgres
(1 row)