PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres hängt jedes Element (falls nicht vorhanden) eines Arrays an eine Array-Spalte an oder setzt es

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.

http://rextester.com/GKS7382