PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wykonać operacje aktualizacji na kolumnach typu JSONB w Postgresie 9.4?

Jeśli możesz uaktualnić do Postgresql 9.5, jsonb_set polecenie jest dostępne, jak wspomnieli inni.

W każdej z poniższych instrukcji SQL pominąłem where klauzula zwięzłości; oczywiście chciałbyś to dodać z powrotem.

Zaktualizuj nazwę:

UPDATE test SET data = jsonb_set(data, '{name}', '"my-other-name"');

Zastąp tagi (w przeciwieństwie do dodawania lub usuwania tagów):

UPDATE test SET data = jsonb_set(data, '{tags}', '["tag3", "tag4"]');

Zastąpienie drugiego tagu (0-indeksowane):

UPDATE test SET data = jsonb_set(data, '{tags,1}', '"tag5"');

Dołącz tag (to zadziała, o ile będzie mniej niż 999 tagów; zmiana argumentu 999 na 1000 lub wyższy powoduje błąd . Wydaje się, że nie ma to już miejsca w Postgresie 9.5.3; można zastosować znacznie większy indeks):

UPDATE test SET data = jsonb_set(data, '{tags,999999999}', '"tag6"', true);

Usuń ostatni tag:

UPDATE test SET data = data #- '{tags,-1}'

Kompleksowa aktualizacja (usuń ostatni tag, wstaw nowy tag i zmień nazwę):

UPDATE test SET data = jsonb_set(
    jsonb_set(data #- '{tags,-1}', '{tags,999999999}', '"tag3"', true), 
    '{name}', '"my-other-name"');

Należy zauważyć, że w każdym z tych przykładów nie aktualizujesz w rzeczywistości pojedynczego pola danych JSON. Zamiast tego tworzysz tymczasową, zmodyfikowaną wersję danych i przypisujesz tę zmodyfikowaną wersję z powrotem do kolumny. W praktyce wynik powinien być taki sam, ale pamiętanie o tym powinno sprawić, że złożone aktualizacje, takie jak ostatni przykład, będą bardziej zrozumiałe.

W złożonym przykładzie istnieją trzy przekształcenia i trzy wersje tymczasowe:Najpierw usuwany jest ostatni znacznik. Następnie ta wersja jest przekształcana poprzez dodanie nowego tagu. Następnie druga wersja jest przekształcana poprzez zmianę name pole. Wartość w data kolumna zostaje zastąpiona wersją ostateczną.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wielokrotne wywołanie funkcji zwracającej zestaw z argumentem tablicowym

  2. Interwał dopasowania PostgreSQL między czasem rozpoczęcia i zakończenia względem znacznika czasu

  3. Jak zaimportować dane z pliku CSV do tabeli PostgreSQL?

  4. Funkcja działa szybciej bez modyfikatora STRICT?

  5. Trendy PostgreSQL:najpopularniejsi dostawcy chmury, języki, VACUUM, strategie zarządzania zapytaniami i typy wdrożeń w przedsiębiorstwach