数组 – 如何将复合类型的数组从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数组中删除括号,我收到错误“等待括号”. 解决方法
答案可能很晚,但解决了这个问题.
node-postgres需要的正确语法是:
[ '(b9d78fc3-b55a-452e-b935-8ce4f1e79284,CHUPERM)','(b9d78fc3-b55a-452e-b935-8ce4f1e79284,HUE)',... ] 不需要二维数组,而是需要一维数组中的行的字符串表示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |