带有来自节点 postgres 的文本数组参数的 plpgsql 函数

plpgsql function with text array parameter coming from node postgres

我在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}

该函数的行为符合我对 mixid 的预期 - 循环并为每个 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}。 我尝试传递“{''yes'',''no''}”,我得到的结果相同 {''yes'',''no''}.

我的函数是使用 node-postgres 作为准备语句调用的: "select domix(,);"
和 $1,$2 由 req.body.mix, req.body.domix

传递

如果我必须显式转换为 ::TEXT[] 我应该在哪里做?

非常感谢

我不得不在函数调用中进行显式转换:

select function(,::TEXT[]);

现在数据输入正确了。 感谢帮助我找到解决方案的帮助和指点!