sql >> Databasteknik >  >> RDS >> PostgreSQL

Uppdatering av heltalskolumn från jsonb-medlem misslyckas med:kolumn är av typen heltal men uttrycket är av typen jsonb

Ett enda uppsättningsbaserat SQL-kommando är mycket effektivare än looping:

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?

För att svara på din ursprungliga fråga:

Eftersom du försökte konvertera jsonb värde till heltal . I din lösning har du redan funnit att du behöver ->> operator istället för -> för att extrahera text , som kan castas till heltal .

Ditt andra försök lade till ett andra fel:

t->'social'::int

Utöver ovanstående:operatörsföreträde . Cast-operatören :: binder starkare än json-operatorn -> . Som du redan har hittat dig själv vill du verkligen:

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

Mycket liknande fall på dba.SE:



  1. Bör PHP-utvecklare använda MySQL:s lagrade procedurer?

  2. få JOIN-tabellen som en rad resultat med PostgreSQL/NodeJS

  3. Hur man utför redigering i junction table

  4. MySQL groupwise MAX() returnerar oväntade resultat