Perintah SQL berbasis set tunggal jauh lebih efisien daripada 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?
Untuk menjawab pertanyaan awal Anda:
Karena Anda mencoba mengonversi jsonb
nilai ke integer
. Dalam solusi Anda, Anda sudah menemukan bahwa Anda memerlukan ->>
operator alih-alih ->
untuk mengekstrak text
, yang dapat dilemparkan ke integer
.
Upaya kedua Anda menambahkan kesalahan kedua:
t->'social'::int
Selain yang di atas:diutamakan operator . Operator pemeran ::
mengikat lebih kuat dari operator json ->
. Seperti Anda sudah menemukan diri Anda, Anda benar-benar ingin:
(t->>'social')::int
Kasus yang sangat mirip di dba.SE: