sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres lägger till eller ställer in varje element (om det inte finns) i en array till en arraykolumn

Jag antar att arr_str är av typen text[] (även om du inte använde rätt format för dem, så jag kan ha fel; om så är fallet måste du casta ditt värde till text[] ).

Använd följande sats om du vill ta bort dubbletter, som redan finns i arr_str kolumn:

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 använd följande när du vill bevara befintliga dubbletter:

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

Båda dessa uttalanden kommer inte att röra rader, som inte kommer att påverkas ändå (titta på where not arr_str @> '{b,c,d}' predikat). Detta är vanligtvis den bästa praxisen och rekommenderas nästan alltid när utlösare är inblandade.

http://rextester.com/GKS7382



  1. MySQL:Hur väljer man UTC-offset och sommartid för alla tidszoner?

  2. MySQL INSERT ... PÅ DUPLIKATNYCKELUPPDATERING med django 1.4 för bulkinfogning

  3. Hur implementerar man taggningssystem som liknar SO i php/mysql?

  4. Implementera Django-projekt på Google Cloud App Engine med externa bibliotek