Ще приема, че arr_str
е от тип text[]
(въпреки че не сте използвали правилния формат за тях, така че може да греша; ако случаят е такъв, ще трябва да прехвърлите стойността си към text[]
).
Използвайте следния оператор, ако искате да премахнете дублиранията, които вече присъстват в 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}'
Или използвайте следния, когато искате да запазите съществуващи дублирания:
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}'
И двата израза няма да докоснат редове, които така или иначе няма да бъдат засегнати (вижте where not arr_str @> '{b,c,d}'
предикат). Това обикновено е най-добрата практика и почти винаги се препоръчва, когато са включени тригери.