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

Актуализирането на цяла колона от jsonb член е неуспешно с:колоната е от тип integer, но изразът е от тип jsonb

Една единствена SQL команда, базирана на набор, е много по-ефективна от цикъла:

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?

За да отговорите на първоначалния си въпрос:

Защото се опитвахте да конвертирате jsonb стойност на integer . Във вашето решение вече сте открили, че имате нужда от ->> оператор вместо -> за извличане на text , което може да бъде преобразувано в integer .

Вашият втори опит добави втора грешка:

t->'social'::int

В допълнение към горното:предимство на оператора . Операторът за прехвърляне :: се свързва по-силно от json оператора -> . Както вече сте се открили, наистина искате:

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

Много подобен случай на 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. Проверете дали NULL съществува в Postgres масива

  2. Какъв е правилният индекс за запитване на структури в масиви в Postgres jsonb?

  3. PostgreSQL:Дайте всички разрешения на потребител в база данни на PostgreSQL

  4. PostgreSQL репликация за аварийно възстановяване

  5. Postgresql :Как да избера първите n процента(%) записи от всяка група/категория