sql >> Databáze >  >> RDS >> PostgreSQL

Aktualizace celočíselného sloupce z člena jsonb se nezdaří s:sloupec je typu integer, ale výraz je typu jsonb

Jediný příkaz SQL založený na sadě je mnohem efektivnější než smyčkování:

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?

Odpověď na vaši původní otázku:

Protože jste se pokoušeli převést jsonb hodnotu na integer . Ve vašem řešení jste již zjistili, že potřebujete ->> operátor namísto -> extrahovat text , které lze přetypovat na integer .

Váš druhý pokus přidal druhou chybu:

t->'social'::int

Kromě výše uvedeného:přednost operátora . Operátor přetypování :: váže silnější než operátor json -> . Jako už jste se našli, opravdu chcete:

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

Velmi podobný případ na dba.SE:



  1. Chyba DateTime při vkládání do MySQL

  2. Vyberte všechna pole, kde hodnota pole není v poli

  3. Řešení pro omezený rozsah TIMESTAMP MySQL?

  4. Jaký typ dat MySQL by měl být použit pro zeměpisnou šířku/délku s 8 desetinnými místy?