F.17. 스포츠 토토 - 스포츠 토토 KEY/GIÁ TRỊ DATATATY#

Mô -đun này thực hiện스포츠 토토Kiểu dữ liệu để lưu trữ các bộ khóa/giá trị trong mộtPostgreSQLGiá trị. Điều này có thể hữu ích trong các kịch bản khác nhau, chẳng hạn như các hàng có nhiều thuộc tính hiếm khi được kiểm tra hoặc dữ liệu bán cấu trúc. Các khóa và giá trị chỉ đơn giản là chuỗi văn bản.

Mô -đun này được coi làHồiTrustedHồi, nghĩa là, nó có thể được cài đặt bởi những người không phải là người siêu giám sát cóTạoĐặc quyền trên cơ sở dữ liệu hiện tại.

F.17.1. 스포츠 토토Đại diện bên ngoài#

Biểu diễn văn bản của스포츠 토토, được sử dụng cho đầu vào và đầu ra, bao gồm không hoặc nhiều hơnKey = giá trịcặp được phân tách bằng dấu phẩy. Một số ví dụ:

K = V.
foo = thanh, baz = bất cứ điều gì
"1-a" = "bất cứ điều gì ở tất cả"

Thứ tự của các cặp không đáng kể (và có thể không được sao chép trên đầu ra). Khoảng trắng giữa các cặp hoặc xung quanh=Dấu hiệu bị bỏ qua. Các phím và giá trị trích dẫn kép bao gồm khoảng trắng, dấu phẩy,=S hoặcs. Để bao gồm một báo giá kép hoặc dấu gạch chéo ngược trong một khóa hoặc giá trị, hãy thoát nó bằng một dấu gạch chéo ngược.

mỗi khóa trong một스포츠 토토là duy nhất. Nếu bạn khai báo스포츠 토토Với các khóa trùng lặp, chỉ có một cái sẽ được lưu trữ trong스포츠 토토Và không có gì đảm bảo sẽ được giữ:

Chọn 'a = 1, a = 2' :: 스포츠 토토;
  hstore
----------
 "A" = "1"

Một giá trị (nhưng không phải là khóa) có thể là SQLnull. Ví dụ:

key = null

ThenullTừ khóa không nhạy cảm với trường hợp. Hai phần trích dẫnnullĐể coi nó là chuỗi thông thườngnullxông.

Lưu ý

Hãy nhớ rằng스포츠 토토Định dạng văn bản, khi được sử dụng cho đầu vào, áp dụngtrướcBất kỳ trích dẫn hoặc thoát yêu cầu nào. Nếu bạn đang vượt qua스포츠 토토theo nghĩa đen thông qua một tham số, sau đó không cần xử lý bổ sung. Nhưng nếu bạn đang chuyển nó dưới dạng hằng số theo nghĩa đen được trích dẫn, thì bất kỳ ký tự nào một cách nào và (tùy thuộc vào cài đặt củaStandard_Conforming_StringsTham số cấu hình) Các ký tự Backslash cần được thoát chính xác. Nhìn thấyPhần 4.1.2.1Để biết thêm về việc xử lý các hằng số chuỗi.

Trên đầu ra, báo giá đôi luôn bao quanh các khóa và giá trị, ngay cả khi nó không hoàn toàn cần thiết.

F.17.2. 스포츠 토토toán tử và chức năng#

Các toán tử được cung cấp bởi스포츠 토토Mô -đun được hiển thị trongBảng F.6, các chức năng trongBảng F.7.

Bảng F.6. 스포츠 토토toán tử

Nhà điều hành

Mô tả

Ví dụ

스포츠 토토 - TextText

Trả về giá trị được liên kết với phím đã cho hoặcnullNếu không có.

'a = x, b = y' :: 스포츠 토토 - 'a'x

스포츠 토토 - Text []Text []

Trả về các giá trị được liên kết với các khóa đã cho hoặcnullNếu không có.

'a = x, b = y, c = z' :: 스포츠 토토 - mảng ['c', 'a']"z", "x"

스포츠 토토 || 스포츠 토토스포츠 토토

Concatenates Hai스포츠 토토s.

'a = b, c = d' :: hstore || 'c = x, d = q' :: hstore"A" = "B", "C" = "X", "D" = "Q"

스포츠 토토 ? TextBoolean

không스포츠 토토chứa khóa?

'A = 1' :: 스포츠 토토? 'Một'T

스포츠 토토 ? & Text []Boolean

không스포츠 토토chứa tất cả các khóa được chỉ định?

'a = 1, b = 2' :: 스포츠 토토? & Array ['A', 'B']T

스포츠 토토 ? | Text []Boolean

không스포츠 토토chứa bất kỳ khóa nào được chỉ định?

'a = 1, b = 2' :: 스포츠 토토? | Mảng ['b', 'c']T

스포츠 토토 @ 스포츠 토토Boolean

Vận hành bên trái có chứa phải không?

'a = b, b = 1, c = null' :: hstore @ 'b = 1'T

스포츠 토토 <@ 스포츠 토토Boolean

là toán hạng bên trái có ở bên phải?

'A = C' :: 스포츠 토토 <@ 'a = B, b = 1, c = null'f

스포츠 토토 - Text스포츠 토토

Xóa phím khỏi toán hạng bên trái.

'a = 1, b = 2, c = 3' :: 스포츠 토토 - 'b' :: text"A" = "1", "C" = "3"

스포츠 토토 - Text []스포츠 토토

Xóa các phím từ toán hạng bên trái.

'a = 1, b = 2, c = 3' :: 스포츠 토토 - mảng ['a', 'b']"C" = "3"

스포츠 토토 - 스포츠 토토스포츠 토토

Xóa các cặp từ toán hạng bên trái phù hợp với các cặp trong toán hạng bên phải.

'a = 1, b = 2, c = 3' :: 스포츠 토토 - 'a = 4, b = 2' :: 스포츠 토토"A" = "1", "C" = "3"

AnyEuity #= 스포츠 토토AnyEuity

Thay thế các trường trong toán hạng bên trái (phải là loại tổng hợp) với các giá trị phù hợp từ스포츠 토토.

hàng (1,3) #= 'f1 = 11' :: hstore(11,3)

%% 스포츠 토토Text []

Chuyển đổi스포츠 토토đến một mảng các khóa và giá trị xen kẽ.

%% 'a = foo, b = bar' :: hstorea, foo, b, bar

%# 스포츠 토토Text []

Chuyển đổi스포츠 토토đến mảng khóa/giá trị hai chiều.

%# 'a = foo, b = bar' :: hstorea, foo, b, bar


Bảng F.7. 스포츠 토토Chức năng

chức năng

Mô tả

Ví dụ

스포츠 토토(Record) →스포츠 토토

Xây dựng một스포츠 토토Từ bản ghi hoặc hàng.

스포츠 토토 (hàng (1,2))"f1" = "1", "f2" = "2"

스포츠 토토(Text []) →스포츠 토토

Xây dựng một스포츠 토토Từ một mảng, có thể là mảng khóa/giá trị hoặc mảng hai chiều.

스포츠 토토 (mảng ['A', '1', 'B', '2'])"A" = "1", "B" = "2"

스포츠 토토 (mảng [['c', '3'], ['d', '4']])"C" = "3", "d" = "4"

스포츠 토토(Text [], Text []) →스포츠 토토

Xây dựng một스포츠 토토Từ các mảng khóa và giá trị riêng biệt.

스포츠 토토 (mảng ['a', 'b'], mảng ['1', '2'])"A" = "1", "B" = "2"

스포츠 토토(Text, Text) →스포츠 토토

làm cho một mục đơn스포츠 토토.

스포츠 토토 ('A', 'B')"A" = "B"

AKEYS(스포츠 토토) →Text []

trích xuất một스포츠 토토's Phím dưới dạng mảng.

akeys ('a = 1, b = 2')a, b

SKEYS(스포츠 토토) →Setof Text

trích xuất một스포츠 토토S phím như một tập hợp.

SKEYS ('A = 1, B = 2')

a
B

Avals(스포츠 토토) →Text []

trích xuất một스포츠 토토s giá trị dưới dạng mảng.

Avals ('a = 1, b = 2')1,2

svals(스포츠 토토) →Setof Text

trích xuất một스포츠 토토s giá trị như một tập hợp.

svals ('a = 1, b = 2')

1
2

스포츠 토토_to_array(스포츠 토토) →Text []

trích xuất một스포츠 토토'của các phím và giá trị dưới dạng một mảng các khóa và giá trị xen kẽ.

스포츠 토토_to_array ('a = 1, b = 2')a, 1, b, 2

스포츠 토토_to_matrix(스포츠 토토) →Text []

trích xuất một스포츠 토토S phí và giá trị dưới dạng mảng hai chiều.

스포츠 토토_to_matrix ('a = 1, b = 2')a, 1, b, 2

스포츠 토토_to_json(스포츠 토토) →json

Chuyển đổi một스포츠 토토đến AjsonGiá trị, chuyển đổi tất cả các giá trị không null thành chuỗi JSON.

Hàm này được sử dụng ngầm khi스포츠 토토Giá trị được đúc thànhjson.

"A Key": "1", "B": "T", "C": NULL, "D": "12345", "E": "012345", "F": "1.234"

스포츠 토토_to_jsonb(스포츠 토토) →jsonb

Chuyển đổi một스포츠 토토đến AJSONBGiá trị, chuyển đổi tất cả các giá trị không null thành chuỗi JSON.

Hàm này được sử dụng ngầm khi스포츠 토토Giá trị được đúc thànhJSONB.

"A Key": "1", "B": "T", "C": NULL, "D": "12345", "E": "012345", "F": "1.234"

스포츠 토토_TO_JSON_LOOSE(스포츠 토토) →json

Chuyển đổi một스포츠 토토đến AJSONGiá trị, nhưng cố gắng phân biệt các giá trị số và boolean để chúng không được trích xuất trong JSON.

"A Key": 1, "B": True, "C": NULL, "D": 12345, "E": "012345", "F": 1.234, "G"

HSTORE_TO_JSONB_LOOSE(스포츠 토토) →jsonb

Chuyển đổi một스포츠 토토đến AJSONBGiá trị, nhưng cố gắng phân biệt các giá trị số và boolean để chúng không được trích xuất trong JSON.

"A Key": 1, "B": True, "C": NULL, "D": 12345, "E": "012345"

Slice(스포츠 토토, Text []) →스포츠 토토

Trích xuất một tập hợp con스포츠 토토Chỉ chứa các khóa được chỉ định.

Slice ('a = 1, b = 2, c = 3' :: hstore, mảng ['b', 'c', 'x'])"B" = "2", "C" = "3"

mỗi(스포츠 토토) →Setof Record(Key Text, giá trị Text)

trích xuất một스포츠 토토'các phím và giá trị như một tập hợp các bản ghi.

Chọn * từ mỗi ('a = 1, b = 2')

khóa | giá trị
-----+-------
 A | 1
 B | 2

tồn tại(스포츠 토토, Text) →Boolean

do스포츠 토토chứa khóa?

tồn tại ('a = 1', 'a')T

Xác định(스포츠 토토, Text) →Boolean

do스포츠 토토chứa khôngnullGiá trị cho khóa?

Xác định ('a = null', 'a')f

Xóa(스포츠 토토, Text) →스포츠 토토

Xóa cặp với phím khớp.

Xóa ('A = 1, B = 2', 'B')"A" = "1"

Xóa(스포츠 토토, Text []) →스포츠 토토

Xóa các cặp với các phím phù hợp.

Xóa ('a = 1, b = 2, c = 3', mảng ['a', 'b'])"C" = "3"

Xóa(스포츠 토토, 스포츠 토토) →스포츠 토토

Xóa các cặp khớp với các cặp trong đối số thứ hai.

Xóa ('a = 1, b = 2', 'a = 4, b = 2' :: hstore)"A" = "1"

Population_Record(AnyEuity, 스포츠 토토) →AnyEuity

Thay thế các trường trong toán hạng bên trái (phải là loại tổng hợp) với các giá trị phù hợp từ스포츠 토토.

population_record (hàng (1,2), 'f1 = 42' :: hstore)(42,2)


Ngoài các toán tử và chức năng này, các giá trị của스포츠 토토Loại có thể được đăng ký, cho phép chúng hoạt động như các mảng kết hợp. Chỉ một chỉ số duy nhất của loạiTextcó thể được chỉ định; Nó được hiểu là một khóa và giá trị tương ứng được tìm nạp hoặc lưu trữ. Ví dụ,

Tạo bảng mytable (h hstore);
Chèn vào các giá trị mytable ('a = b, c = d');
Chọn H ['A'] từ MyTable;
 h
---
 b
(1 hàng)

Cập nhật MyTable Set H ['C'] = 'Mới';
Chọn H từ mytable;
          h
--------------------------
 "A" = "B", "C" = "Mới"
(1 hàng)

Một lần tìm kiếm được đăng kýnullNếu chỉ số lànullhoặc khóa đó không tồn tại trong스포츠 토토. .-Nhà điều hành.) Một bản cập nhật được đăng ký không thành công nếu chỉ số lànull; Nếu không, nó thay thế giá trị cho khóa đó, thêm một mục vào스포츠 토토Nếu khóa chưa tồn tại.

F.17.3. Chỉ mục#

스포츠 토토Hỗ trợ Chỉ số Gist và Gin cho@, ?, ? &? |Người vận hành. Ví dụ:

Tạo chỉ mục HIDX trên Testhstore bằng Gist (h);

Tạo chỉ mục HIDX trên Testhstore bằng Gin (H);

gist_스포츠 토토_opsGIST OPCLASS xấp xỉ một tập hợp các cặp khóa/giá trị dưới dạng chữ ký bitmap. Tham số số nguyên tùy chọn của nóSiglenXác định độ dài chữ ký trong byte. Độ dài mặc định là 16 byte. Các giá trị hợp lệ của độ dài chữ ký nằm trong khoảng từ 1 đến 2024 byte. Chữ ký dài hơn dẫn đến một tìm kiếm chính xác hơn (quét một phần nhỏ hơn của chỉ mục và ít trang đống hơn), với chi phí của một chỉ số lớn hơn.

Ví dụ về việc tạo một chỉ mục như vậy với độ dài chữ ký là 32 byte:

40296_40374

스포츠 토토cũng hỗ trợBtreehoặc​​HashChỉ mục cho=toán tử. Điều này cho phép스포츠 토토cột được khai báođộc đáohoặc được sử dụng trongNhóm bởi, Đặt hàng bởihoặckhác biệtBiểu thức. Thứ tự sắp xếp cho스포츠 토토Giá trị không đặc biệt hữu ích, nhưng các chỉ mục này có thể hữu ích cho các tra cứu tương đương. Tạo chỉ mục cho=so sánh như sau:

Tạo chỉ mục HIDX trên Testhstore bằng Btree (h);

Tạo chỉ mục HIDX trên Testhstore bằng băm (h);

F.17.4. Ví dụ#

Thêm khóa hoặc cập nhật khóa hiện có có giá trị mới:

Tab Cập nhật đặt H ['C'] = '3';

Một cách khác để làm điều tương tự là:

Tab Cập nhật đặt H = H || hstore ('c', '3');

Nếu nhiều khóa được thêm hoặc thay đổi trong một thao tác, phương pháp nối tiếp tục hơn so với đăng ký:

Tab Cập nhật đặt H = H || hstore (mảng ['q', 'w'], mảng ['11 ',' 12 ']);

Xóa khóa:

Tab Update Set H = Delete (h, 'K1');

Chuyển đổi ARecordđến một스포츠 토토:

Tạo thử nghiệm bảng (số nguyên col1, văn bản col2, văn bản col3);
Chèn vào các giá trị kiểm tra (123, 'foo', 'thanh');

Chọn HStore (T) từ thử nghiệm là T;
                   hstore
-------------------------------------------------
 "col1" = "123", "col2" = "foo", "col3" = "bar"
(1 hàng)

Chuyển đổi một스포츠 토토đến được xác định trướcRecordloại:

Tạo thử nghiệm bảng (số nguyên col1, văn bản col2, văn bản col3);

Chọn * Từ population_record (null :: test,
                              '"col1" = "456", "col2" = "zzz"');
 col1 | col2 | col3
------+------+------
  456 | zzz |
(1 hàng)

Sửa đổi bản ghi hiện có bằng cách sử dụng các giá trị từ스포츠 토토:

Tạo thử nghiệm bảng (số nguyên col1, văn bản col2, văn bản col3);
Chèn vào các giá trị kiểm tra (123, 'foo', 'thanh');

Chọn (r).* Từ (chọn t #= '"col3" = "Baz"' làm r từ thử nghiệm t) s;
 col1 | col2 | col3
------+------+------
  123 | foo | Baz
(1 hàng)

F.17.5. Thống kê#

The스포츠 토토Loại, vì tính tự do nội tại của nó, có thể chứa rất nhiều khóa khác nhau. Kiểm tra các khóa hợp lệ là nhiệm vụ của ứng dụng. Các ví dụ sau đây chứng minh một số kỹ thuật để kiểm tra các khóa và có được số liệu thống kê.

Ví dụ đơn giản:

Chọn * từ mỗi ('aaa = bq, b = null, "" = 1');

Sử dụng bảng:

Tạo chỉ số bảng là chọn (mỗi (h)).

Thống kê trực tuyến:

Chọn khóa, đếm (*) từ
  (Chọn (mỗi (h)). Khóa từ Testhstore) làm chỉ số
  Nhóm theo khóa
  Đặt hàng theo đếm desc, khóa;
    chìa khóa | đếm
-----------+-------
 dòng |   883
 Truy vấn |   207
 pos |   203
 nút |   202
 Không gian |   197
 trạng thái |   195
 công khai |   194
 Tiêu đề |   190
 org |   189
...................

F.17.6. Khả năng tương thích#

Kể từ Postgresql 9.0,스포츠 토토Sử dụng biểu diễn nội bộ khác với các phiên bản trước. Điều này không có trở ngại cho việc nâng cấp/khôi phục từ bỏ vì biểu diễn văn bản (được sử dụng trong bãi rác) không thay đổi.

Trong trường hợp nâng cấp nhị phân, khả năng tương thích tăng được duy trì bằng cách có mã mới nhận ra dữ liệu định dạng cũ. Điều này sẽ đòi hỏi một hình phạt hiệu suất nhỏ khi xử lý dữ liệu chưa được sửa đổi bởi mã mới. Có thể buộc nâng cấp tất cả các giá trị trong cột bảng bằng cách thực hiệnCập nhậtCâu như sau:

45340_45393

Một cách khác để làm điều đó là:

45466_45542

TheBảng thay đổiPhương pháp yêu cầuAccess ExclusiveKhóa trên bảng, nhưng không dẫn đến việc làm cho bảng với các phiên bản hàng cũ.

F.17.7. Biến đổi#

tiện ích mở rộng bổ sung có sẵn để thực hiện các biến đổi cho스포츠 토토Loại cho các ngôn ngữ PL/Perl và PL/Python. Các tiện ích mở rộng cho PL/perl được gọi là스포츠 토토_plperl스포츠 토토_plperlu, cho PL/Perl đáng tin cậy và không tin cậy. Nếu bạn cài đặt các biến đổi này và chỉ định chúng khi tạo hàm,스포츠 토토Giá trị được ánh xạ tới băm Perl. Phần mở rộng cho PL/Python được gọi là스포츠 토토_plpython3u. Nếu bạn sử dụng nó,스포츠 토토Giá trị được ánh xạ tới từ điển Python.

THẬN TRỌNG

Được khuyến nghị mạnh mẽ rằng các tiện ích mở rộng biến đổi được cài đặt trong cùng lược đồ như스포츠 토토. Nếu không

F.17.8. Tác giả#

Oleg Bartunov, Moscow, Đại học Moscow, Nga

Teodor Sigaev, Moscow, Delta-Soft Ltd., Nga

Cải tiến bổ sung của Andrew Gierth, Vương quốc Anh

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.