Presumo che arr_str è di tipo text[] (anche se non hai utilizzato il formato corretto per loro, quindi potrei sbagliarmi; in tal caso, dovrai trasmettere il tuo valore a text[] ).
Usa la seguente istruzione, se vuoi rimuovere i duplicati, che sono già presenti nel arr_str colonna:
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}'
Oppure, usa il seguente quando vuoi preservare le duplicazioni esistenti:
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}'
Entrambe queste istruzioni non toccheranno le righe, che non saranno comunque interessate (guarda where not arr_str @> '{b,c,d}' predicato). Questa è solitamente la migliore pratica, ed è quasi sempre consigliata, quando sono coinvolti i trigger.