sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres tilføjer eller indstiller hvert element (hvis det ikke findes) i en matrix til en matrixkolonne

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.

http://rextester.com/GKS7382



  1. Hvorfor er logiske læsninger for aggregerede vinduesfunktioner så høje?

  2. Problem med at teste database laravel 7.x

  3. JCombobox-værdi hentes fra My Sql

  4. Hvilken NpgsqlDbType skal bruges til at rydde Kan ikke skrive CLR-typefejl