Bài học theo mô-đun (1/2)
Tích hợp JSON và JSONB
Tích hợp JSON và JSONB
PostgreSQL đã viết lại các quy tắc của cơ sở dữ liệu bằng cách kết hợp tính chất ACID vững chắc, yên tâm của SQL với tính năng động, linh hoạt đặc trưng của NoSQL. Nó đã làm như vậy bằng cách cung cấp các cột vốn dành riêng cho việc lưu trữ dữ liệu JSON.
Lưu ý: trong Postgres hầu như luôn được khuyến nghị sử dụng JSONB. "B" là viết tắt của Nhị phân: Tài liệu JSON được lưu trữ trong các cột này mất định dạng văn bản thuần túy nhưng chúng có khả năng được xác thực, truy vấn với hiệu suất rất cao, được thao tác và thậm chí được lập chỉ mục bằng cây B cổ điển hoặc GIN INDEX.
Điều hướng JSON: toán tử "Mũi tên"
Rất tiếc, cơ sở dữ liệu ecommerce hiện không có cột JSON thuần túy được xác định trước. Tuy nhiên, chúng ta có thể tạo các giá trị JSON tạm thời và "truyền" chúng từ văn bản!
Khi làm việc với JSON, các toán tử đi sâu vào đối tượng và mảng là -> (giữ dữ liệu ở dạng jsonb/json thuần túy) hoặc phiên bản "mở rộng" ->> (chuyển đổi dữ liệu JSON gặp phải thành văn bản).
Ví dụ mang tính học thuật, như thể đã tồn tại một cột JSON "siêu dữ liệu":
-- Look up the value associated with the info key
SELECT metadata->'info' FROM users;
-- Drill into info, and grab city as text
SELECT metadata->'info'->>'city' FROM users;Hãy truy vấn JSON một cách nhanh chóng. Chiếu json theo nghĩa đen \`'{"user": {"name": "Mario"}}'::json\` và sử dụng toán tử \`->\` kết hợp với phiên bản văn bản (\`->>\`) để trích xuất 'name', đặt tên cho cột được trích xuất là 'user_name'.
Hiển thị gợi ý
Truyền tới ::json hoặc ::jsonb và sử dụng ->'user'->>'name'.
Giải pháp khả dụng sau 3 lần thử
Điều gì sẽ xảy ra nếu chúng ta truyền một mảng? Truy cập mảng trong json_b trong Postgres hoạt động bằng INDEX (dựa trên 0). Trích xuất phần tử THỨ HAI dưới dạng văn bản từ \`'["A", "B", "C"]'::json\` và đặt tên là 'letter'.
Hiển thị gợi ý
->>1 (dựa trên số 0!)
Giải pháp khả dụng sau 3 lần thử