Một lệnh SQL dựa trên một tập hợp duy nhất hiệu quả hơn nhiều so với lặp:
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?
Để trả lời câu hỏi ban đầu của bạn:
Vì bạn đang cố chuyển đổi jsonb
giá trị thành integer
. Trong giải pháp của bạn, bạn đã thấy rằng bạn cần ->>
toán tử thay vì ->
để trích xuất văn bản text
, có thể được truyền thành integer
.
Lần thử thứ hai của bạn đã thêm một lỗi thứ hai:
t->'social'::int
Ngoài các điều trên: ưu tiên toán tử . Toán tử truyền ::
liên kết mạnh hơn toán tử json ->
. Giống như bạn đã tìm thấy chính mình, bạn thực sự muốn:
(t->>'social')::int
Trường hợp tương tự trên dba.SE: