sql >> Base de Datos >  >> RDS >> PostgreSQL

La actualización de la columna de enteros del miembro jsonb falla con:la columna es de tipo entero pero la expresión es de tipo jsonb

Un solo comando SQL basado en conjuntos es mucho más eficiente que hacer un bucle:

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?

Para responder a su pregunta original:

Porque estabas tratando de convertir el jsonb valor a integer . En su solución ya descubrió que necesita el ->> operador en lugar de -> para extraer text , que se puede convertir a integer .

Su segundo intento agregó un segundo error:

t->'social'::int

Además de lo anterior:precedencia de operadores . El operador de conversión :: se une más fuerte que el operador json -> . Como ya te encontraste, realmente quieres:

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

Caso muy similar en dba.SE: