我有一个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)' ],
[ '(b9d78fc3-b55a-452e-b935-8ce4f1e79284)', '(HU)' ],
[ '(00ae9a6c-781f-48d1-ab42-bfa87d09bdbb)', '(HITE)' ],
[ '(00ae9a6c-781f-48d1-ab42-bfa87d09bdbb)', '(HIJFIRM)' ],
[ '(00ae9a6c-781f-48d1-ab42-bfa87d09bdbb)', '(DVERMNYEZAPILI)' ],
[ '(00ae9a6c-781f-48d1-ab42-bfa87d09bdbb)', '(TICHTOMENYANEVIDISH)' ],
[ '(00ae9a6c-781f-48d1-ab42-bfa87d09bdbb)', '(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函数中所需的一切)。但是使用这种复合型数组我什么也做不了。请帮忙。抱歉我的英语不好。
答案 0 :(得分:1)
答案可能会迟到,但会解决此问题。 node-postgres所需的正确语法是:
[
'(b9d78fc3-b55a-452e-b935-8ce4f1e79284, CHUPERM)',
'(b9d78fc3-b55a-452e-b935-8ce4f1e79284, HUE)',
...
]
不需要二维数组,而是需要一维数组中行的字符串表示。
答案 1 :(得分:-1)
您确定在每一个陈述之间需要进行麻痹吗?我在pgadmin中发布的示例中看到htat,他们没有括号,可能你应该删除它们
[ [ 'b9d78fc3-b55a-452e-b935-8ce4f1e79284', 'CHUPERM' ],
[ 'b9d78fc3-b55a-452e-b935-8ce4f1e79284', 'HUE' ],
[ 'b9d78fc3-b55a-452e-b935-8ce4f1e79284', 'HU' ],
[ '00ae9a6c-781f-48d1-ab42-bfa87d09bdbb', 'HITE' ],
[ '00ae9a6c-781f-48d1-ab42-bfa87d09bdbb', 'HIJFIRM' ],
[ '00ae9a6c-781f-48d1-ab42-bfa87d09bdbb', 'DVERMNYEZAPILI' ],
[ '00ae9a6c-781f-48d1-ab42-bfa87d09bdbb', 'TICHTOMENYANEVIDISH' ],
[ '00ae9a6c-781f-48d1-ab42-bfa87d09bdbb', 'HITEBEAD' ] ]