Postgres có hai kiểu lưu JSON:
json: lưu nguyên văn text, giữ nguyên khoảng trắng/thứ tự khoá/khoá trùng; mỗi lần truy vấn phải parse lại → ghi nhanh, đọc/thao tác chậm.jsonb: lưu dạng nhị phân đã parse, bỏ khoảng trắng, không giữ thứ tự khoá, loại khoá trùng; truy vấn/index nhanh hơn, ghi tốn thêm chút chi phí parse.
Sức mạnh của jsonb:
- Toán tử phong phú: ->, ->>, @> (chứa), ? (có khoá), path #>.
- Index GIN trên jsonb → truy vấn theo khoá/chứa rất nhanh, hợp dữ liệu bán cấu trúc.
Khi nào dùng: cần lưu linh hoạt và truy vấn vào bên trong document → chọn jsonb. Nhưng đừng lạm dụng thay cho cột quan hệ khi dữ liệu có cấu trúc rõ và cần ràng buộc/JOIN. json chỉ hợp khi cần giữ y nguyên văn bản gốc.