Asumiré que arr_str
es de tipo text[]
(aunque no usó el formato adecuado para ellos, por lo que puedo estar equivocado; si ese es el caso, deberá convertir su valor a text[]
).
Utilice la siguiente declaración, si desea eliminar las duplicaciones, que ya están presentes en el arr_str
columna:
update tabl1
set arr_str = (select array_agg(distinct e) from unnest(arr_str || '{b,c,d}') e)
where not arr_str @> '{b,c,d}'
O utilice el siguiente cuando desee conservar las duplicaciones existentes:
update tabl1
set arr_str = arr_str || array(select unnest('{b,c,d}'::text[]) except select unnest(arr_str))
where not arr_str @> '{b,c,d}'
Ambas declaraciones no tocarán las filas, que no se verán afectadas de todos modos (mira el where not arr_str @> '{b,c,d}'
predicado). Esta suele ser la mejor práctica, y casi siempre se recomienda, cuando se trata de factores desencadenantes.