Předpokládám, že arr_str je typu text[] (ačkoli jste pro ně nepoužili správný formát, takže se mohu mýlit; pokud je to tak, budete muset přenést svou hodnotu do text[] ).
Pokud chcete odstranit duplicity, které jsou již v arr_str, použijte následující příkaz sloupec:
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}'
Nebo použijte následující, pokud chcete zachovat existující duplikace:
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}'
Oba tyto příkazy se nedotknou řádků, které stejně nebudou ovlivněny (podívejte se na where not arr_str @> '{b,c,d}' predikát). Toto je obvykle nejlepší postup a téměř vždy se doporučuje, když se jedná o spouštěče.