PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres anexa ou define cada elemento (se não existir) de uma matriz para uma coluna de matriz


Vou assumir que arr_str é do tipo text[] (embora você não tenha usado o formato adequado para eles, então posso estar errado; se for esse o caso, você precisará converter seu valor para text[] ).

Use a seguinte instrução, se você quiser remover duplicações, que já estão presentes no arr_str coluna:
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 use o seguinte quando quiser preservar as duplicações existentes:
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}'

Ambas as instruções não tocarão nas linhas, que não serão afetadas de qualquer maneira (veja where not arr_str @> '{b,c,d}' predicado). Esta é geralmente a melhor prática e quase sempre é recomendada quando os gatilhos estão envolvidos.

http://rextester.com/GKS7382