Sql Postgres,函数,在插入日期数组值之前

Sql Postgres,函数,在插入日期数组值之前,sql,postgresql,Sql,Postgresql,这是我的职责` create or replace function test.insert(_orderid integer, __partnerids integer[], __maginitude double precision[]) returns boolean language plpgsql as $$ DECLARE res boolean; BEGIN PERFORM orderid FROM test.order_partner_magnitude WHERE

这是我的职责`

create or replace function test.insert(_orderid integer, __partnerids      
integer[], __maginitude double precision[])
returns boolean
language plpgsql
as $$
DECLARE  res boolean;
BEGIN
PERFORM orderid
FROM test.order_partner_magnitude
WHERE orderid = _orderid
FOR UPDATE SKIP LOCKED;

DELETE
FROM test.order_partner_magnitude
WHERE orderid = _orderId;

INSERT INTO test.order_partner_magnitude(orderid, partnerid, magnitude)
SELECT _orderId, unnest(__partnerids),unnest(__maginitude);

res =true ;
RETURN res;
end ;
$$;
一些使用示例
selecttest.insert(1,{30,10,20}',{46,59,12}')结果将是

orderid | partnerid | magnitude
      1 |        30 |        46
      1 |        10 |        59
      1 |        20 |        12
现在我需要检查合作伙伴是否忙碌,我可以通过此查询获取忙碌的合作伙伴id
从test.order\u partner中选择partnerid,其中status=1

id为20的示例合作伙伴在插入结果必须为`

orderid | partnerid | magnitude
      1 |        30 |        46
      1 |        10 |        59

我想像在函数中一样使用1个insert查询插入所有数据,这样就不能从参数中循环
partnerid
,还有其他方法吗?如果没有其他方法,我可以更改数据类型,例如
[[partnerid,magnity],[partnerid,magnity]…
或任何其他类型,它们将帮助解决这个问题

在一个查询中可行,例如:

db=# with c(o, p, m) as (values (1, '{30,10,20}'::int[],'{46,59,12}'::int[]))
, op(i, status) as (values(20,1))
, mypart as (select o, unnest(p) pa, unnest(m) me from c)
select mypart.*
from mypart
left outer join op on i = pa
where i is null;
 o | pa | me
---+----+----
 1 | 30 | 46
 1 | 10 | 59
(2 rows)
因此,对于您,smth喜欢:

INSERT INTO test.order_partner_magnitude(orderid, partnerid, magnitude)
with c(o, p, m) as (values (_orderId, __partnerids, __maginitude))
    , mypart as (select o, unnest(p) pa, unnest(m) me from c)
    select mypart.*
    from mypart
    left outer join test.order_partner on partner_id = pa
    where i is null;

在可能的情况下,当我在函数中使用此函数时,不需要将此
c(o,p,m)作为(值(\u orderId,\u partnerId,\u maginitude))
。我认为
unnest
将每个值返回为row
orderid、partnerid、magnity
,是否写入?必须忽略
status=1
的合作伙伴,其中partnerid为null,status为1
左侧外部连接测试的情况更好,我用cte只是为了证明它的工作原理。。。哪个更好取决于数据量和结构。。。你可以试着这样问