PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres ajoute ou définit chaque élément (s'il n'existe pas) d'un tableau à une colonne de tableau

Je suppose que arr_str est de type text[] (bien que vous n'ayez pas utilisé le bon format pour eux, je peux donc me tromper ; si c'est le cas, vous devrez convertir votre valeur en text[] ).

Utilisez l'instruction suivante, si vous souhaitez supprimer les doublons, qui sont déjà présents dans le arr_str colonne :

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}'

Ou, utilisez le suivant lorsque vous souhaitez conserver les doublons existants :

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}'

Ces deux instructions ne toucheront pas les lignes, qui ne seront de toute façon pas affectées (regardez le where not arr_str @> '{b,c,d}' prédicat). Il s'agit généralement de la meilleure pratique, et presque toujours recommandée, lorsque des déclencheurs sont impliqués.

http://rextester.com/GKS7382