PostgreSQL cung cấp hỗ trợ mạnh mẽ cho việc lưu trữ và truy vấn dữ liệu định dạng JSON và JSONB, cho phép người dùng xử lý dữ liệu không có cấu trúc một cách hiệu quả. Dưới đây là các điểm nổi bật về cách PostgreSQL hỗ trợ JSON và JSONB:
JSON: Kiểu dữ liệu này lưu trữ dữ liệu dưới dạng chuỗi JSON. Dữ liệu sẽ được kiểm tra cú pháp khi lưu trữ, nhưng không được tối ưu hóa cho việc truy vấn.
CREATE TABLE my_table ( id SERIAL PRIMARY KEY, data JSON ); INSERT INTO my_table (data) VALUES ('{"name": "John", "age": 30}');
JSONB: Đây là kiểu dữ liệu nhị phân cho JSON, lưu trữ dữ liệu ở dạng nhị phân. JSONB được tối ưu hóa cho các phép toán truy vấn và cho phép thực hiện các thao tác như lập chỉ mục, so sánh và tìm kiếm nhanh hơn.
CREATE TABLE my_table ( id SERIAL PRIMARY KEY, data JSONB ); INSERT INTO my_table (data) VALUES ('{"name": "Jane", "age": 25}');
PostgreSQL cung cấp một loạt các chức năng và toán tử để thao tác với dữ liệu JSON và JSONB:
->
: Dùng để truy cập một trường trong đối tượng JSON.SELECT data->'name' AS name FROM my_table;
->>
: Dùng để lấy giá trị của trường dưới dạng chuỗi.SELECT data->>'age' AS age FROM my_table;
#>
: Dùng để truy cập trường lồng nhau.SELECT data#>'{address, city}' AS city FROM my_table;
jsonb_array_elements()
: Chuyển đổi một mảng JSONB thành các dòng.SELECT jsonb_array_elements(data->'phones') AS phone FROM my_table;
jsonb_each()
: Trả về các cặp khóa-giá trị từ một đối tượng JSONB.SELECT * FROM jsonb_each(data) FROM my_table;
jsonb_set()
: Cập nhật giá trị trong JSONB.SELECT jsonb_set(data, '{name}', '"New Name"') FROM my_table;
PostgreSQL cho phép lập chỉ mục các trường trong JSONB, giúp tăng tốc độ truy vấn:
CREATE INDEX idxgin ON my_table USING GIN (data);
SELECT * FROM my_table WHERE data = '{"name": "John", "age": 30}';
@>
(contains) và ?
(existence) giúp kiểm tra xem một trường hoặc giá trị có tồn tại trong JSONB hay không.SELECT * FROM my_table WHERE data @> '{"name": "John"}';
SELECT * FROM my_table WHERE data->>'age'::int > 20;
jsonb_build_object()
và jsonb_build_array()
để tạo ra các đối tượng JSON và mảng từ các giá trị khác.SELECT jsonb_build_object('name', 'Alice', 'age', 28); SELECT jsonb_build_array('apple', 'banana', 'cherry');
Hỗ trợ JSON và JSONB trong PostgreSQL giúp người dùng linh hoạt trong việc xử lý dữ liệu không có cấu trúc, tối ưu hóa hiệu suất và dễ dàng tương tác với các ứng dụng hiện đại. Với khả năng truy vấn, lập chỉ mục và các chức năng phong phú, PostgreSQL là một trong những lựa chọn hàng đầu cho việc quản lý dữ liệu JSON.