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 ->
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: