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ự khóa/khóa 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ự khóa, loại khóa 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ó khóa), path #>.
- Index GIN trên jsonb → truy vấn theo khóa/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.