Jeg antager, at arr_str
er af typen text[]
(selvom du ikke brugte det korrekte format til dem, så jeg kan tage fejl; hvis det er tilfældet, skal du caste din værdi til text[]
).
Brug følgende sætning, hvis du vil fjerne duplikationer, som allerede er til stede i arr_str
kolonne:
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}'
Eller brug følgende, når du vil bevare eksisterende duplikationer:
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}'
Begge disse udsagn berører ikke rækker, som alligevel ikke bliver påvirket (se på where not arr_str @> '{b,c,d}'
prædikat). Dette er normalt den bedste praksis og anbefales næsten altid, når der er udløsere involveret.