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.