我在plpgsql中有以下功能
create or replace function domix(mix int[],newmix text[]) RETURNS integer AS \$$
DECLARE
I INT;
newmix_char text;
BEGIN
FOREACH newmix_char IN ARRAY newmix
LOOP
insert into mix_table (name) values (newmix_char);
END LOOP;
FOREACH I IN ARRAY MIX
LOOP
insert into domix_table (id) values (I);
END LOOP;
RETURN 1;
END;
\$$ LANGUAGE plpgsql;
服务器是节点服务器。 我看过Pass array from node-postgres to plpgsql function并且我已经关注了它。 我传递了指示的值,(domixids是一个int数组,newmixes是一个字符串数组)
'mix': '{'+domixids.join() +'}',
'newmix':'{'+ newmixes.join()+'}',
在db调用显示之前在服务器上打印:mixids {14,13} newmix {si,non}
该函数的行为与我对mixids的预期一样 - 循环并为每个id插入一行。但是newmix被认为是1个字符串并且被插入,没有循环。 我试过{'si','non'},但结果相同。 我的错误在哪里?我显然没有发送它所期望的功能。或者我完全退出,这不是循环和字符串数组的方式?我正在使用Postgres 9.4 感谢任何指针
我正在添加更多细节(尝试过这些建议 - 因为它不起作用)。正如我所说的那样对整数都很有效,而且我显然没有正确传递字符串数组。我将列表作为一组字符串逗号从界面(newmix)中分离出来。我拆分
var newmixes = newmix.split(/,/);
console.log(new mixes); --> ["yes", "non", "trois"]
var infoWhat= { 'mix': '{'+domixids.join() +'}',
'newmix':'{'+ newmixes.join()+'}'
};
console.log(infoWhat); ----> Object {mix: "{}",new mix: "{yes,no}"}}
在数据库中,我得到:{yes,no}。 我尝试传递“{''是'',''不''}”,同样的结果我得到{''是'',''不''}。
使用node-postgres作为预准备语句调用我的函数:
“选择domix($ 1,$ 2);”
和$ 1,$ 2由req.body.mix,req.body.domix
如果我必须显式转换为:: TEXT []我应该在哪里做?
非常感谢
答案 0 :(得分:0)
我必须在函数调用中放置显式强制转换:
select function($1,$2::TEXT[]);
现在正确输入数据。 感谢帮助我找到解决方案的帮助和指示!