PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres aggiunge o imposta ogni elemento (se non esiste) di un array su una colonna di array

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.

http://rextester.com/GKS7382