Sử dụng jsonb_populate_record()
(hoặc json_populate_record()
cho json
) với loại hàng nổi tiếng là mục tiêu. Bạn có thể sử dụng bảng tạm thời để đăng ký một loại để sử dụng đặc biệt (nếu bạn không thể sử dụng hiện có bảng hoặc loại kết hợp tùy chỉnh):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Sau đó:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Hoặc sử dụng jsonb_to_record()
(hoặc json_to_record()
cho json
) và cung cấp danh sách định nghĩa cột với lệnh gọi:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Hoặc trích xuất và truyền từng trường riêng lẻ:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Cả ba đều hoạt động cho json
và jsonb
như nhau. Chỉ cần sử dụng biến thể hàm tương ứng.
Có liên quan: