PostgreQuery 9.2 giới thiệu json
loại trường. Tại sao và khi nào tôi nên sử dụng nó? Nó có lợi ích gì đối với một trường văn bản?
Tôi nghĩ rằng có các tùy chọn truy vấn mới có sẵn, tuy nhiên tôi chưa thấy cái nào cả. Tui bỏ lỡ điều gì vậy?
PostgreQuery 9.2 giới thiệu json
loại trường. Tại sao và khi nào tôi nên sử dụng nó? Nó có lợi ích gì đối với một trường văn bản?
Tôi nghĩ rằng có các tùy chọn truy vấn mới có sẵn, tuy nhiên tôi chưa thấy cái nào cả. Tui bỏ lỡ điều gì vậy?
Câu trả lời:
Lợi ích của tính năng mới là hai lần. Các cột loạijson
xác minh tính hợp lệ của nội dung của nó để những gì trong cột tự động là JSON hợp lệ và bạn sẽ gặp lỗi nếu bạn cố gắng viết bất cứ điều gì khác cho nó.
Và bạn có các hàm cơ bản để tạo JSON hợp lệ khi đang di chuyển từ các hàng hoặc mảng - đây là trường hợp sử dụng rất phổ biến.
Tôi xin trích lời Andrew Dunstan thuộc danh pgsql-hacker :
Ở một số giai đoạn có thể sẽ có một số chức năng xử lý json (trái ngược với các chức năng sản xuất json), nhưng không phải trong 9.2.
Tôi đã sử dụng trích dẫn đó trước câu hỏi liên quan này trên SO .
.. cuối cùng mang lại một số chức năng và toán tử. Kiểm tra trang hướng dẫn cho các hàm JSON .
Câu trả lời liên quan về SO:
json
trường.@ Sẽ đưa lên bài viết blog. Xem bình luận dưới đây.
Hãy chắc chắn kiểm tra jsonb
loại mới với một loạt các chức năng mới.
Trên tất cả, bộ lưu trữ nhị phân, phân tách cho phép lưu trữ nhỏ hơn trên đĩa và toán tử đẳng thức cho jsonb
(không giống như json
), điều này làm cho một số hoạt động bổ sung có thể (như DISTINCT
hoặc một UNIQUE
chỉ mục).
Tuy nhiên, nhiều chức năng đã được thêm cho cả hai json
và jsonb
. json_to_record()
, json_to_recordset()
vv Nhiều hơn trong các ghi chú phát hành.
Tóm lại, kiểu dữ liệu JSON (cũng như phần mở rộng và kiểu dữ liệu HSTORE cũ hơn) cho phép bạn sử dụng PostgreQuery như một kho lưu trữ dữ liệu "không có lược đồ" (hoặc kết hợp dữ liệu "không có lược đồ" quan hệ và không liên quan), thay vì phải sử dụng một số tùy chọn NoQuery khác (như MongoDB). Bạn thậm chí còn đạt được một số điều mà bạn không thể làm với MongoDB, như lập chỉ mục được lọc, lập chỉ mục biểu thức, v.v ... Hạn chế duy nhất là PostgreQuery không hỗ trợ loại bỏ lỗi như MongoDB ... tuy nhiên, tôi thực sự đặt câu hỏi về việc thường xuyên shending là thực sự cần thiết. Với cơ sở dữ liệu PostgreQuery 9.3 được cấu hình tốt, có đủ tài nguyên O / S và một số chỉ mục biểu thức được lọc kỹ lưỡng, bạn có thể dễ dàng đạt được các truy xuất hàng không có lược đồ trong phạm vi 0,25 mili giây.
HTH, Dave Sisk
Về cơ bản tôi thấy ba trường hợp sử dụng ở đây:
Cái đầu tiên có thể được thực hiện trực tiếp từ PostgreSQL mà không cần addons. Bạn sẽ có thể làm một cái gì đó như:
SELECT row_to_json(mt.id, mt.testval, array_agg(mt2))
FROM my_table mt
JOIN my_table2 mt2 ON mt.id = mt2.mt_id
WHERE mt.id = 123;
Điều này sau đó có thể được sử dụng để tạo các mảng lồng nhau, vv trong đầu ra của bạn và tránh rất nhiều vấn đề phân tích cú pháp lộn xộn ở phía ứng dụng.
thứ hai là truyền dữ liệu phức tạp vào db để xử lý. Hiện tại không có chức năng tích hợp để tạo điều kiện thuận lợi cho việc này, nhưng với các addon như pl / v8js, bạn có thể lập trình cơ sở dữ liệu của mình trong Javascript và sử dụng json làm định dạng trao đổi. Điều này có thể cho phép tạo ra các giao diện phong phú hơn trong cơ sở dữ liệu của bạn. Lưu ý rằng vì bạn có thể lập chỉ mục các kết quả đầu ra của hàm, bạn có thể sử dụng điều này để tạo các chỉ mục các khía cạnh của JSON được lưu trữ trong db của bạn.
Thứ ba là một lĩnh vực chúng tôi dự định sử dụng nó trong LedgerSMB. Ý tưởng là chúng tôi có thể muốn cho phép các nhà tích hợp hệ thống lưu trữ thông tin rất đơn giản cùng với tài khoản của khách hàng. Điều này sau đó có thể được đóng gói trong một trường JSON sẽ được lưu trữ. Điều này sẽ không thể được truy vấn trực tiếp bởi các ứng dụng chính, nhưng nếu mọi người muốn thêm ứng dụng này bằng pl / v8js thì điều này có thể được thực hiện cho các doanh nghiệp cá nhân sử dụng phần mềm.