Zakładam, że arr_str
jest typu text[]
(chociaż nie użyłeś dla nich odpowiedniego formatu, więc mogę się mylić; jeśli tak jest, będziesz musiał rzutować swoją wartość na text[]
).
Użyj poniższej instrukcji, jeśli chcesz usunąć duplikaty, które są już obecne w arr_str
kolumna:
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}'
Lub użyj następującego, jeśli chcesz zachować istniejące duplikaty:
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}'
Obie te instrukcje nie dotkną wierszy, na które i tak nie będzie miało wpływu (spójrz na where not arr_str @> '{b,c,d}'
orzec). Jest to zwykle najlepsza praktyka i prawie zawsze jest zalecana, gdy zaangażowane są wyzwalacze.