PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres добавя или задава всеки елемент (ако не съществува) от масив към колона от масив

Ще приема, че 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}' предикат). Това обикновено е най-добрата практика и почти винаги се препоръчва, когато са включени тригери.

http://rextester.com/GKS7382



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преместването на база данни с pg_dump и psql -U postgres db_name <... води до ГРЕШКА:релацията table_name не съществува

  2. JPA SequenceGenerator и GeneratedValue:име / свойството на генератора е уникално само за клас?

  3. Rails 4:Използването на функцията PostgreSQL по ред причинява грешка в заявката, поради това, че включената таблица не е свързана

  4. SQLAlchemy:актуализиране от_select

  5. Как да обработвам разпределена транзакция в postgresql?