Ich nehme an, dass arr_str
ist vom Typ text[]
(obwohl Sie nicht das richtige Format dafür verwendet haben, kann ich mich irren; wenn das der Fall ist, müssen Sie Ihren Wert in text[]
umwandeln ).
Verwenden Sie die folgende Anweisung, wenn Sie Duplikate entfernen möchten, die bereits in arr_str
vorhanden sind Spalte:
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}'
Oder verwenden Sie die folgende, wenn Sie vorhandene Duplikate beibehalten möchten:
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}'
Diese beiden Anweisungen berühren keine Zeilen, die ohnehin nicht betroffen sind (siehe where not arr_str @> '{b,c,d}'
Prädikat). Dies ist in der Regel die beste Vorgehensweise und wird fast immer empfohlen, wenn Trigger im Spiel sind.