在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;