tỷ lệ kèo bóng đá 88 loại dữ liệu JSON để lưu trữ dữ liệu JSON (ký hiệu đối tượng JavaScript), như được chỉ định trongRFC 7159. Dữ tỷ lệ kèo bóng đá 88 đó cũng có thể được lưu trữ dưới dạngText
, nhưng tỷ lệ kèo bóng đá 88 loại dữ liệu JSON có lợi thế là thực thi rằng mỗi giá trị được lưu trữ là hợp lệ theo tỷ lệ kèo bóng đá 88 quy tắc của JSON. Ngoài ra còn có tỷ lệ kèo bóng đá 88 chức năng và toán tử dành riêng cho JSON và tỷ lệ kèo bóng đá 88 toán tử có sẵn cho dữ liệu được lưu trữ trong tỷ lệ kèo bóng đá 88 loại dữ liệu này;Phần 9.15.
Có hai loại dữ liệu tỷ lệ kèo bóng đá 88:jsonb
vàjsonbb
. Họ chấp nhậngần nhưBộ giá trị giống hệt nhau làm đầu vào. Sự khác biệt thực tế chính là một trong những hiệu quả.jsonb
Kiểu dữ liệu lưu trữ một bản sao chính xác của văn bản đầu vào, tỷ lệ kèo bóng đá 88 chức năng xử lý phải sửa chữa trên mỗi lần thực thi; trong khijsonbb
Dữ tỷ lệ kèo bóng đá 88 được lưu trữ ở định dạng nhị phân bị phân hủy làm cho nó chậm hơn một chút so với đầu vào do chi phí chuyển đổi được thêm vào, nhưng nhanh hơn đáng kể để xử lý, vì không cần thiếtjsonbb
Cũng hỗ trợ lập chỉ mục, có thể là một lợi thế đáng kể.
vìjsonb
Loại lưu trữ một bản sao chính xác của văn bản đầu vào, nó sẽ bảo tồn khoảng trắng không đáng kể về mặt ngữ nghĩa giữa tỷ lệ kèo bóng đá 88 mã thông báo, cũng như thứ tự tỷ lệ kèo bóng đá 88 khóa trong tỷ lệ kèo bóng đá 88 đối tượng JSON. Ngoài ra, nếu một đối tượng JSON trong giá trị chứa cùng một khóa hơn một lần, tất cả tỷ lệ kèo bóng đá 88 cặp khóa/giá trị được giữ.jsonbb
Không bảo toàn không gian trắng, không bảo toàn thứ tự của tỷ lệ kèo bóng đá 88 phím đối tượng và không giữ tỷ lệ kèo bóng đá 88 khóa đối tượng trùng lặp. Nếu tỷ lệ kèo bóng đá 88 khóa trùng lặp được chỉ định trong đầu vào, chỉ có giá trị cuối cùng được giữ.
Nói chung, hầu hết tỷ lệ kèo bóng đá 88 ứng dụng nên thích lưu trữ dữ liệu JSON dưới dạngjsonbb
, Trừ khi có nhu cầu khá chuyên môn, chẳng hạn như tỷ lệ kèo bóng đá 88 giả định di sản về việc đặt hàng tỷ lệ kèo bóng đá 88 khóa đối tượng.
PostgreSQLChỉ cho phép một bộ ký tự mã hóa trên mỗi cơ sở dữ liệu. Do đó, tỷ lệ kèo bóng đá 88 loại JSON không thể phù hợp với đặc tả JSON trừ khi mã hóa cơ sở dữ liệu là UTF8.
RFC 7159 cho phép tỷ lệ kèo bóng đá 88 chuỗi JSON chứa tỷ lệ kèo bóng đá 88 chuỗi thoát Unicode được ký hiệu là\ u
. Trong hàm đầu vào choxxxx
jsonb
12644_12803\ u
). Tuy nhiên, chức năng đầu vào chojsonbb
12898_12981U+007F
) trừ khi mã hóa cơ sở dữ tỷ lệ kèo bóng đá 88 là UTF8. TheJSONB
Loại cũng từ chối\ U0000
(vì điều đó không thể được biểu diễn trongPostgreSQL'sText
Loại), và nó khẳng định rằng bất kỳ việc sử dụng tỷ lệ kèo bóng đá 88 cặp thay thế unicode để chỉ định tỷ lệ kèo bóng đá 88 ký tự bên ngoài mặt phẳng đa ngôn ngữ cơ bản không chính xác. Escapes unicode hợp lệ được chuyển đổi thành ký tự ASCII hoặc UTF8 tương đương để lưu trữ;
Nhiều chức năng xử lý tỷ lệ kèo bóng đá 88 được mô tả trongPhần 9.15Sẽ chuyển đổi Escapes Unicode sang tỷ lệ kèo bóng đá 88 ký tự thông thường và do đó sẽ ném tỷ lệ kèo bóng đá 88 loại lỗi tương tự chỉ được mô tả ngay cả khi đầu vào của chúng thuộc loạijsonb
khôngJSONB
. Thực tế làjsonb
14049_14365
Khi chuyển đổi đầu vào tỷ lệ kèo bóng đá 88 văn bản thànhJSONB
, tỷ lệ kèo bóng đá 88 loại nguyên thủy được mô tả bởiRFC7159 được ánh xạ hiệu quả vào bản địaPostgreSQLtỷ lệ kèo bóng đá 88 loại, như thể hiện trongBảng 8.23. Do đó, có một số ràng buộc bổ sung nhỏ về những gì cấu thành hợp lệJSONB
Dữ tỷ lệ kèo bóng đá 88 không áp dụng chojsonb
Loại, cũng như JSON trong bản tóm tắt, tương ứng với tỷ lệ kèo bóng đá 88 giới hạn về những gì có thể được biểu diễn bằng kiểu dữ liệu cơ bản. Đáng chú ý,jsonb
sẽ từ chối tỷ lệ kèo bóng đá 88 số nằm ngoài phạm vi củaPostgreSQL Số
Kiểu dữ tỷ lệ kèo bóng đá 88, trong khitỷ lệ kèo bóng đá 88
Sẽ không. tỷ lệ kèo bóng đá 88 hạn chế được xác định theo triển khai như vậy được cho phép bởiRFC7159. Tuy nhiên, trong thực tế, tỷ lệ kèo bóng đá 88 vấn đề như vậy có nhiều khả năng xảy ra trong tỷ lệ kèo bóng đá 88 triển khai khác, vì thông thường đại diện cho JSONSố
Loại nguyên thủy là IEEE 754 Điểm nổi chính xác gấp đôi (màRFC7159 dự đoán rõ ràng và cho phép). Khi sử dụng JSON làm định dạng trao đổi với tỷ lệ kèo bóng đá 88 hệ thống như vậy, nguy cơ mất độ chính xác số so với dữ liệu được lưu trữ ban đầu bởiPostgreSQLnên được xem xét.
Ngược lại, như đã lưu ý trong bảng có một số hạn chế nhỏ đối với định dạng đầu vào của tỷ lệ kèo bóng đá 88 loại nguyên thủy JSON không áp dụng cho tương ứngPostgreSQLloại.
Bảng 8.23. tỷ lệ kèo bóng đá 88 loại nguyên thủy của JSON và tương ứngPostgreSQLloại
tỷ lệ kèo bóng đá 88 Loại nguyên thủy | PostgreSQLloại | ghi chú |
---|---|---|
chuỗi |
Text |
\ U0000 16978_17061 |
Số |
Số |
NAN vàVô cực Giá trị không được phép |
Boolean |
Boolean |
Chỉ chữ thườngTRUE vàSai Chính tả được chấp nhận |
null |
(Không) | SQLnull là một khái niệm khác |
Cú pháp đầu vào/đầu ra cho tỷ lệ kèo bóng đá 88 loại dữ liệu JSON được chỉ định trongRFC7159.
Sau đây đều hợp lệjsonb
(hoặcJSONB
) Biểu thức:
- Giá trị vô hướng/nguyên thủy đơn giản
Như đã nêu trước đây, khi giá trị tỷ lệ kèo bóng đá 88 được nhập và sau đó được in mà không có bất kỳ xử lý bổ sung nào,jsonb
xuất bản cùng một văn bản được nhập, trong khijsonbb
không bảo tồn tỷ lệ kèo bóng đá 88 chi tiết đáng kể về mặt ngữ nghĩa như khoảng trắng. Ví dụ: lưu ý sự khác biệt ở đây:
Chọn '"Bar": "Baz", "Balance": 7.77, "Active": Sai' :: tỷ lệ kèo bóng đá 88;
Một chi tiết đáng chú ý về mặt ngữ nghĩa là trongjsonbb
, Số sẽ được in theo hành vi của cơ bảnSố
Loại. Trong thực tế, điều này có nghĩa là tỷ lệ kèo bóng đá 88 số được nhập vớie
Ký hiệu sẽ được in mà không có nó, ví dụ:
Chọn '"Đọc": 1.230E-5' :: tỷ lệ kèo bóng đá 88, '"Đọc": 1.230E-5' :: jsonbb;
Tuy nhiên,JSONB
20372_20528
Đại diện cho dữ liệu là JSON có thể linh hoạt hơn đáng kể so với mô hình dữ liệu quan hệ truyền thống, hấp dẫn trong tỷ lệ kèo bóng đá 88 môi trường nơi tỷ lệ kèo bóng đá 88 yêu cầu là chất lỏng. Hoàn toàn có thể cho cả hai cách tiếp cận để cùng tồn tại và bổ sung cho nhau trong cùng một ứng dụng.Tài tỷ lệ kèo bóng đá 88(mốc dữ tỷ lệ kèo bóng đá 88) trong bảng.
Dữ liệu JSON phải tuân theo tỷ lệ kèo bóng đá 88 cân nhắc kiểm soát đồng thời giống như bất kỳ loại dữ liệu nào khác khi được lưu trữ trong bảng. Mặc dù việc lưu trữ tỷ lệ kèo bóng đá 88 tài liệu lớn là có thể thực hiện được, hãy nhớ rằng bất kỳ bản cập nhật nào cũng có được khóa cấp hàng trên toàn bộ hàng.
jsonbb
Ngăn chặn và tồn tạiKiểm traViênglà một khả năng quan trọng củaJSONB
. Không có bộ cơ sở song song chojsonb
Loại. Kiểm tra ngăn chặn xem mộtJSONB
Tài liệu có trong đó một tài liệu khác. tỷ lệ kèo bóng đá 88 ví dụ này trả về đúng ngoại trừ như đã lưu ý:
- Giá trị vô hướng/nguyên thủy đơn giản chỉ chứa giá trị giống hệt nhau:khôngđược coi là trong
Nguyên tắc chung là đối tượng chứa phải khớp với đối tượng chứa theo cấu trúc và nội dung dữ liệu, có thể sau khi loại bỏ một số phần tử mảng không khớp hoặc tỷ lệ kèo bóng đá 88 cặp phím/giá trị đối tượng khỏi đối tượng chứa. Nhưng hãy nhớ rằng thứ tự của tỷ lệ kèo bóng đá 88 phần tử mảng không có ý nghĩa khi thực hiện kết hợp ngăn chặn và tỷ lệ kèo bóng đá 88 phần tử mảng trùng lặp chỉ được xem xét một lần một lần.
Là một ngoại lệ đặc biệt đối với nguyên tắc chung mà tỷ lệ kèo bóng đá 88 cấu trúc phải khớp, một mảng có thể chứa một giá trị nguyên thủy:
- Mảng này chứa giá trị chuỗi nguyên thủy:
jsonbb
cũng cótồn tạitoán tử, là một biến thể về chủ đề ngăn chặn: nó kiểm tra xem một chuỗi (được đưa ra dưới dạngText
Giá trị) xuất hiện dưới dạng phần tử phím hoặc mảng đối tượng ở cấp cao nhất củaJSONB
Giá trị. tỷ lệ kèo bóng đá 88 ví dụ này trả về đúng ngoại trừ như đã lưu ý:
- Chuỗi tồn tại dưới dạng phần tử mảng:
25849_26085
Vì việc ngăn chặn JSON được lồng, một truy vấn thích hợp có thể bỏ qua lựa chọn rõ ràng tỷ lệ kèo bóng đá 88 đối tượng phụ. Ví dụ, giả sử rằng chúng ta có mộtdoc
Cột chứa tỷ lệ kèo bóng đá 88 đối tượng ở cấp cao nhất, với hầu hết tỷ lệ kèo bóng đá 88 đối tượng chứaTags
tỷ lệ kèo bóng đá 88 trường chứa tỷ lệ kèo bóng đá 88 mảng của tỷ lệ kèo bóng đá 88 đối tượng phụ. Truy vấn này tìm tỷ lệ kèo bóng đá 88 mục trong đó tỷ lệ kèo bóng đá 88 đối tượng phụ chứa cả hai"Thuật ngữ": "Paris"
và"Thuật ngữ": "Thực phẩm"
xuất hiện, trong khi bỏ qua bất kỳ phím nào như vậy bên ngoàiTags
mảng:
chọn Doc- 'site_name' từ tỷ lệ kèo bóng đá 88 trang web
Người ta có thể hoàn thành điều tương tự với, nói,
Chọn Doc- 'SITE_NAME' từ tỷ lệ kèo bóng đá 88 trang web
Nhưng cách tiếp cận đó kém linh hoạt và cũng thường kém hiệu quả.
Mặt khác, toán tử tồn tại tỷ lệ kèo bóng đá 88 không được lồng: nó sẽ chỉ tìm kiếm khóa hoặc phần tử mảng được chỉ định ở cấp cao nhất của giá trị tỷ lệ kèo bóng đá 88.
tỷ lệ kèo bóng đá 88 toán tử ngăn chặn và tồn tại khác nhau, cùng với tất cả tỷ lệ kèo bóng đá 88 toán tử và chức năng JSON khác được ghi lại trongPhần 9.15.
JSONB
lập chỉ mụcChỉ mục GIN có thể được sử dụng để tìm kiếm hiệu quả tỷ lệ kèo bóng đá 88 khóa hoặc tỷ lệ kèo bóng đá 88 cặp khóa/giá trị xảy ra trong một số lượng lớnjsonbb
Tài tỷ lệ kèo bóng đá 88 (mốc dữ tỷ lệ kèo bóng đá 88). Hai GinHồitỷ lệ kèo bóng đá 88 lớp toán tửđược cung cấp, cung cấp hiệu suất và sự đánh đổi linh hoạt khác nhau.
lớp toán tử GIN mặc định chojsonbb
Hỗ trợ tỷ lệ kèo bóng đá 88 truy vấn với tỷ lệ kèo bóng đá 88 toán tử tồn tại khóa cấp cao nhất?
, ? &
và? |
toán tử và toán tử đường dẫn/giá trị@
. (Để biết chi tiết về ngữ nghĩa mà tỷ lệ kèo bóng đá 88 toán tử này thực hiện, xemBảng 9.44.) Một ví dụ về việc tạo một chỉ mục với lớp toán tử này là:
Tạo IDXgin chỉ mục trên API bằng Gin (JDOC);
Lớp toán tử GIN không mặc địnhJSONB_PATH_OPS
Hỗ trợ lập chỉ mục@
Chỉ vận hành. Một ví dụ về việc tạo một chỉ mục với lớp toán tử này là:
Tạo IDXGINP trên API bằng Gin (JDOC JSONB_PATH_OPS);
Hãy xem xét ví dụ về một bảng lưu trữ tỷ lệ kèo bóng đá 88 tài liệu JSON được lấy từ dịch vụ web của bên thứ ba, với định nghĩa lược đồ được ghi lại. Một tài liệu điển hình là:
Chúng tôi lưu trữ tỷ lệ kèo bóng đá 88 tài liệu này trong một bảng có tênAPI
, trong AJSONB
Cột có tênJDOC
. Nếu một chỉ mục gin được tạo trên cột này, tỷ lệ kèo bóng đá 88 truy vấn như sau có thể sử dụng chỉ mục:
- Tìm tài tỷ lệ kèo bóng đá 88 trong đó "công ty" có giá trị "magnafone"
Tuy nhiên, chỉ mục không thể được sử dụng cho tỷ lệ kèo bóng đá 88 truy vấn như sau, bởi vì mặc dù toán tử?
Có thể lập chỉ mục, nó không được áp dụng trực tiếp cho cột được lập chỉ mụcJDOC
:
- Tìm tỷ lệ kèo bóng đá 88 tài liệu trong đó "thẻ" khóa chứa phần tử khóa hoặc mảng "QUI"
Tuy nhiên, với việc sử dụng tỷ lệ kèo bóng đá 88 chỉ mục biểu thức phù hợp, truy vấn trên có thể sử dụng một chỉ mục. Nếu truy vấn cho tỷ lệ kèo bóng đá 88 mục cụ thể trong"Tags"
Khóa là phổ biến, xác định một chỉ mục như thế này có thể đáng giá:
Tạo IDXGIntags trên API bằng Gin ((JDOC - 'Tags'));
Bây giờ,WHERE
mệnh đềjdoc - 'thẻ'? 'Qui'
sẽ được công nhận là ứng dụng của toán tử có thể lập chỉ mục?
đến biểu thức được lập chỉ mụcJDOC - 'Tags'
. (Có thể tìm thấy thêm thông tin về tỷ lệ kèo bóng đá 88 chỉ mục biểu thức trongPhần 11.7.)
Một cách tiếp cận khác để truy vấn là khai thác ngăn chặn, ví dụ:
- Tìm tỷ lệ kèo bóng đá 88 tài liệu trong đó "thẻ" khóa chứa phần tử mảng "QUI"
Một chỉ mục gin đơn giản trênJDOC
Cột có thể hỗ trợ truy vấn này. Nhưng lưu ý rằng một chỉ mục như vậy sẽ lưu trữ tỷ lệ kèo bóng đá 88 bản sao của mọi khóa và giá trị trongJDOC
Cột, trong khi chỉ mục biểu thức của ví dụ trước chỉ lưu trữ dữ tỷ lệ kèo bóng đá 88 được tìm thấy dướiTags
khóa. Mặc dù cách tiếp cận chỉ số đơn giản linh hoạt hơn nhiều (vì nó hỗ trợ tỷ lệ kèo bóng đá 88 truy vấn về bất kỳ khóa nào), tỷ lệ kèo bóng đá 88 chỉ mục biểu thức được nhắm mục tiêu có khả năng nhỏ hơn và nhanh hơn để tìm kiếm so với một chỉ mục đơn giản.
mặc dùJSONB_PATH_OPS
Lớp toán tử chỉ hỗ trợ tỷ lệ kèo bóng đá 88 truy vấn với@
Toán tử, nó có lợi thế hiệu suất đáng chú ý so với lớp toán tử mặc địnhjsonbb_ops
. MỘTJSONB_PATH_OPS
Chỉ mục thường nhỏ hơn nhiều so với Ajsonbb_ops
Chỉ mục trên cùng một dữ liệu và tính đặc hiệu của tỷ lệ kèo bóng đá 88 tìm kiếm là tốt hơn, đặc biệt khi tỷ lệ kèo bóng đá 88 truy vấn chứa tỷ lệ kèo bóng đá 88 khóa xuất hiện thường xuyên trong dữ liệu. Do đó, tỷ lệ kèo bóng đá 88 hoạt động tìm kiếm thường hoạt động tốt hơn so với lớp toán tử mặc định.
Sự khác biệt kỹ thuật giữa Ajsonbb_ops
và AJSONB_PATH_OPS
33078_33248[6]Về cơ bản, mỗiJSONB_PATH_OPS
Mục chỉ mục là một hàm băm của giá trị và (tỷ lệ kèo bóng đá 88) khóa dẫn đến nó; Ví dụ: chỉ mục"foo": "Bar": "Baz"
, một mục chỉ mục duy nhất sẽ được tạo kết hợp cả ba củafoo
, Bar
vàBaz
vào giá trị băm. Do đó, một truy vấn ngăn chặn tìm kiếm cấu trúc này sẽ dẫn đến một tìm kiếm chỉ mục cực kỳ cụ thể;foo
xuất hiện dưới dạng khóa. Mặt khác, AJSONB_OPS
INDEX sẽ tạo ba mục chỉ mục đại diện chofoo
, Bar
vàBaz
riêng biệt; Sau đó để thực hiện truy vấn ngăn chặn, nó sẽ tìm kiếm tỷ lệ kèo bóng đá 88 hàng chứa cả ba mục này.jsonbb_path_ops
Tìm kiếm, đặc biệt nếu có một số lượng rất lớn tỷ lệ kèo bóng đá 88 hàng chứa bất kỳ một trong ba mục chỉ mục.
Một nhược điểm củaJSONB_PATH_OPS
Cách tiếp cận là nó không tạo ra tỷ lệ kèo bóng đá 88 mục nhập chỉ mục cho tỷ lệ kèo bóng đá 88 cấu trúc JSON không chứa bất kỳ giá trị nào, chẳng hạn như"A":
. Nếu một tìm kiếm cho tỷ lệ kèo bóng đá 88 tài liệu chứa một cấu trúc như vậy được yêu cầu, nó sẽ yêu cầu quét toàn bộ chỉ số, khá chậm.JSONB_PATH_OPS
Do đó không phù hợp với tỷ lệ kèo bóng đá 88 ứng dụng thường thực hiện tỷ lệ kèo bóng đá 88 tìm kiếm đó.
jsonbb
cũng hỗ trợBtree
vàHash
Chỉ mục. Đây thường chỉ hữu ích nếu điều quan trọng là kiểm tra sự bình đẳng của tỷ lệ kèo bóng đá 88 tài liệu JSON hoàn chỉnh.Btree
Đặt hàng choJSONB
Datums hiếm khi được quan tâm rất lớn, nhưng cho sự hoàn chỉnh, đó là:
Đối tượng
mảng
Boolean
Số
chuỗi
null
Đối tượng với n cặp
Đối tượng có n - 1 cặp
mảng với n phần tử
Mảng có n - 1 phần tử
tỷ lệ kèo bóng đá 88 đối tượng có số cặp bằng nhau được so sánh theo thứ tự:
Key-1
,giá trị-1
,Key-2
...
Lưu ý rằng tỷ lệ kèo bóng đá 88 khóa đối tượng được so sánh theo thứ tự lưu trữ của chúng; Cụ thể, vì tỷ lệ kèo bóng đá 88 khóa ngắn hơn được lưu trữ trước tỷ lệ kèo bóng đá 88 phím dài hơn, điều này có thể dẫn đến kết quả có thể không trực quan, chẳng hạn như:
"AA": 1, "C": 1 "B": 1, "D": 1
Tương tự, tỷ lệ kèo bóng đá 88 mảng có số lượng phần tử bằng nhau được so sánh theo thứ tự:
Element-1
,Element-2
...
Giá trị JSON nguyên thủy được so sánh bằng cách sử dụng tỷ lệ kèo bóng đá 88 quy tắc so sánh tương tự như đối với cơ bảnPOSTGRESQLKiểu dữ tỷ lệ kèo bóng đá 88. Chuỗi được so sánh bằng cách sử dụng đối chiếu cơ sở dữ tỷ lệ kèo bóng đá 88 mặc định.
tiện ích mở rộng bổ sung có sẵn để thực hiện tỷ lệ kèo bóng đá 88 biến đổi choJSONB
Loại cho tỷ lệ kèo bóng đá 88 ngôn ngữ thủ tục khác nhau.
tỷ lệ kèo bóng đá 88 tiện ích mở rộng cho PL/Perl được gọi làJSONB_PLPERL
vàJSONB_PLPERLU
. Nếu bạn sử dụng chúng,JSONB
Giá trị được ánh xạ tới mảng Perl, băm và vô hướng, nếu thích hợp.
Phần mở rộng cho PL/Python được gọi làjsonbb_plpythonu
, JSONB_PLPYTHON2U
vàJSONB_PLPYTHON3U
(xemPhần 46.1Đối với quy ước đặt tên PL/Python). Nếu bạn sử dụng chúng,JSONB
Giá trị được ánh xạ tới từ điển, danh sách và vô hướng của Python, nếu thích hợp.
[6]Với mục đích này, thuật ngữgiá trịKhănBao gồm tỷ lệ kèo bóng đá 88 phần tử mảng, mặc dù thuật ngữ JSON đôi khi xem xét tỷ lệ kèo bóng đá 88 phần tử mảng khác biệt với tỷ lệ kèo bóng đá 88 giá trị trong tỷ lệ kèo bóng đá 88 đối tượng.