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

Aktualizowanie kolumny typu integer z elementu jsonb kończy się niepowodzeniem:kolumna jest typu integer, ale wyrażenie jest typu jsonb

Pojedyncze polecenie SQL oparte na zbiorze jest o wiele bardziej wydajne niż pętla:

UPDATE words_social w
SET    social = (iu->>'social')::int
FROM   JSONB_ARRAY_ELEMENTS(in_users) iu  -- in_user = function variable
WHERE  w.sid = iu->>'sid';                -- type of sid?

Aby odpowiedzieć na Twoje pierwotne pytanie:

Ponieważ próbowałeś przekonwertować jsonb wartość do integer . W swoim rozwiązaniu już stwierdziłeś, że potrzebujesz ->> operator zamiast -> wyodrębnić text , które można rzutować na integer .

Druga próba dodała drugi błąd:

t->'social'::int

Oprócz powyższych:pierwszeństwo operatorów . Operator rzutowania :: wiąże silniej niż operator json -> . Jak już się znalazłeś, naprawdę chcesz:

(t->>'social')::int

Bardzo podobny przypadek na dba.SE:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wbudowany Postgres do wiosennych testów rozruchowych

  2. Blokowanie predykatów w PostgreSQL 9.2.1 z izolacją Serializable

  3. Czy Django indeksuje klucze Autofield / ID w PostgreSQL?

  4. Para klucz-wartość w PostgreSQL

  5. Konwertujesz kolumny pandy na listę PostgreSQL?