加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 如何将复合类型的数组从nodejs传递给postgresql函数?

发布时间:2020-12-13 15:51:39 所属栏目:百科 来源:网络整理
导读:我有一个postgres功能: CREATE OR REPLACE FUNCTION add_new_views(VARIADIC all_view event_view[]) RETURNS void AS$BODY$DECLARE view event_view;BEGIN FOREACH view IN ARRAY all_view LOOP INSERT INTO t_event_views VALUES (view.event_id,view.dev
我有一个postgres功能:

CREATE OR REPLACE FUNCTION add_new_views(VARIADIC all_view event_view[])
  RETURNS void AS
$BODY$
DECLARE
    view event_view;
BEGIN
    FOREACH view IN ARRAY all_view LOOP 
        INSERT INTO t_event_views VALUES (view.event_id,view.device_code);
    END LOOP;
END;
$BODY$

event_view – 这是我的复合类型:

CREATE TYPE event_view (event_id uuid,device_code text);

我可以通过pgAdmin使用我的函数,如下所示:

SELECT add_new_views(VARIADIC ARRAY [
    ('b9d78fc3-b55a-452e-b935-8ce4f1e79284','asd')::event_view,('b9d78fc3-b55a-452e-b935-8ce4f1e79284','asd')::event_view
]);

但我需要从nodejs调用它.要连接postgresql我使用node-postgres ‘pg’模块.

我发送此请求:

query = 'SELECT add_new_views(VARIADIC [$1])';
current_client.query(query,allViews,function(err,res) {
    if(err) console.log(err);
    console.log(res)
})

allViews – 数组如下所示:

[ [ '(b9d78fc3-b55a-452e-b935-8ce4f1e79284)','(CHUPERM)' ],[ '(b9d78fc3-b55a-452e-b935-8ce4f1e79284)','(HUE)' ],'(HU)' ],[ '(00ae9a6c-781f-48d1-ab42-bfa87d09bdbb)','(HITE)' ],'(HIJFIRM)' ],'(DVERMNYEZAPILI)' ],'(TICHTOMENYANEVIDISH)' ],'(HITEBEAD)' ] ]

作为回应,我得到:

{ [error: malformed record literal: "(b9d78fc3-b55a-452e-b935-8ce4f1e79284)"]
  name: 'error',length: 133,severity: 'ERROR',code: '22P02',detail: 'Too few columns.',hint: undefined,position: undefined,internalPosition: undefined,internalQuery: undefined,where: undefined,schema: undefined,table: undefined,column: undefined,dataType: undefined,constraint: undefined,file: 'rowtypes.c',line: '183',routine: 'record_in' }

如果从元素allView数组中删除括号,我收到错误“等待括号”.
当我尝试传递给postgres简单的一维数组时,一切都很好(我改变了postgre函数中所需的一切).但是使用这种复合型数组我什么也做不了.请帮忙.对不起,我的英语不好.

解决方法

答案可能很晚,但解决了这个问题. node-postgres需要的正确语法是:

[
   '(b9d78fc3-b55a-452e-b935-8ce4f1e79284,CHUPERM)','(b9d78fc3-b55a-452e-b935-8ce4f1e79284,HUE)',...
]

不需要二维数组,而是需要一维数组中的行的字符串表示.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读