PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La mise à jour de la colonne entière à partir du membre jsonb échoue avec :la colonne est de type entier mais l'expression est de type jsonb

Une seule commande SQL basée sur un ensemble est bien plus efficace qu'une boucle :

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?

Pour répondre à votre question initiale :

Parce que vous essayiez de convertir le jsonb valeur en integer . Dans votre solution, vous avez déjà trouvé que vous avez besoin du ->> opérateur au lieu de -> pour extraire le text , qui peut être casté en integer .

Votre deuxième tentative a ajouté une deuxième erreur :

t->'social'::int

En plus de ce qui précède :priorité des opérateurs . L'opérateur de cast :: se lie plus fort que l'opérateur json -> . Comme si vous vous étiez déjà trouvé, vous voulez vraiment :

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

Cas très similaire sur dba.SE :