sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres agrega o establece cada elemento (si no existe) de una matriz en una columna de matriz

Asumiré que arr_str es de tipo text[] (aunque no usó el formato adecuado para ellos, por lo que puedo estar equivocado; si ese es el caso, deberá convertir su valor a text[] ).

Utilice la siguiente declaración, si desea eliminar las duplicaciones, que ya están presentes en el arr_str columna:

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

O utilice el siguiente cuando desee conservar las duplicaciones 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 declaraciones no tocarán las filas, que no se verán afectadas de todos modos (mira el where not arr_str @> '{b,c,d}' predicado). Esta suele ser la mejor práctica, y casi siempre se recomienda, cuando se trata de factores desencadenantes.

http://rextester.com/GKS7382