PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'aggiornamento della colonna intera dal membro jsonb non riesce con:la colonna è di tipo intero ma l'espressione è di tipo jsonb

Un singolo comando SQL basato su set è molto più efficiente del ciclo:

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?

Per rispondere alla tua domanda originale:

Perché stavi cercando di convertire il jsonb valore a integer . Nella tua soluzione hai già scoperto che ti serve il ->> operatore invece di -> per estrarre text , che può essere convertito in integer .

Il tuo secondo tentativo ha aggiunto un secondo errore:

t->'social'::int

Oltre a quanto sopra:precedenza dell'operatore . L'operatore di cast :: si lega più forte dell'operatore json -> . Come ti sei già trovato, vuoi davvero:

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

Caso molto simile su dba.SE: