在greenplum中自定义数组去重函数(亲测可用)

在greenplum数据库中自定义数组函数

  • 背景:我的A表里面有一个字段叫taskidArray text[],是数组类型,这个字段里面存的是一个一个的taskid。
    现在我有另一张表B,里面有一个字段叫taskid。
    现在我要做的是把B表里面的taskid给append到A表里面的taskidArray字段里面去。
    那如果taskidArray里面已经包含了将要插入的taskid,我就不能再往里面插了。
    所以就只能自定义一个函数实现这个功能(看官方提供的数组函数中貌似没有现成的去重函数)。
  • 思路:对数组进行轮询,如果遇到和将要插进去的元素一样的,就直接返回原数组,直到轮询结束,如果没有和将要插进去的元素相同的,就将这个元素append到原来的数组,返回拼接后数组。
CREATE OR REPLACE  function getUniqueArray(taskidArray text[],oneTaskid text) returns text[] as 
$BODY$
declare x text;
begin
	if taskidArray is null then
            return null;
   end if;
	FOR x in array_lower(taskidArray, 1) .. array_upper(taskidArray, 1)
   loop
        if taskidArray[x]=oneTaskid then
              return taskidArray;
        end if ;
   end loop ;
   return oneTaskid||taskidArray ;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

update A set taskidarray=getUniqueArray(taskidarray,B.onetaskid) from B where A.id= B.id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值