Si tengo
select arr_str from tabl1; -> {'a', 'b'} entonces, ¿cómo agrego esta matriz {'b','c','d'} a la columna arr_str para obtener el siguiente resultado?
select arr_str from tabl1; -> {'a', 'b', 'c', 'd'}No quiero SELECCIONAR la columna y crear una nueva matriz para actualizar. Solo quiero usar la consulta ACTUALIZAR .
Asumiré que arr_str es del 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 en text[] ).
Utilice la siguiente declaración, si desea eliminar las duplicaciones, que ya están presentes en la columna arr_str :
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 (observe el where not arr_str @> '{b,c,d}' ). Esta suele ser la mejor práctica, y casi siempre se recomienda, cuando se trata de factores desencadenantes.
Con la instalación predeterminada de pg, puede fusionar dos matrices con || operador:
select arr_str || '{a, b}' from tabl1Pero en ese caso obtendrá duplicados.
Para evitarlos, puede anular la matriz en un conjunto de filas y distinguirlo:
select ARRAY(SELECT DISTINCT UNNEST(arr_str || '{a,b,c}')) from tabl1Si sus valores son enteros, hay una forma más elegante de obtener valores de matriz uniq con el módulo de contribución intarray y la función uniq(): https://www.postgresql.org/docs/current/static/intarray.html
Puede agregar estas funciones de matriz de enteros usando:
CREATE EXTENSION intarraypuede concatenar matrices y luego agregar valores distintos:
t=# with a as (select unnest('{a, b}'::text[] || '{b,c,d}'::text[]) a) select array_agg(distinct a) from a; array_agg ----------- {a,b,c,d} (1 row) Time: 1.312 ms