Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang cho토토 꽁 머니 43_19Phiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

F.16. 토토 캔

Mô -đun này thực hiện토토 캔Dữ liệu Nhập để lưu trữ các bộ của các cặp khóa/giá trị trong mộtPostgreSQLGiá trị. Điều này có thể được 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 điều đó hiếm khi được kiểm tra, hoặc dữ liệu bán cấu trúc. Chìa khóa và giá trị chỉ đơn giản là chuỗi văn bản.

F.16.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ởi 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 tái tạo 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. Kép Các khóa và giá trị bao gồm khoảng trắng, dấu phẩy,=S hoặcs. Để bao gồm báo giá kép hoặc dấu gạch chéo ngược trong một khóa hoặc giá trị, thoát khỏi nó với một dấu gạch chéo ngược.

mỗi khóa trong một토토 캔là duy nhất. Nếu như bạn khai báo토토 캔với trùng lặp Khóa, chỉ có một cái sẽ được lưu trữ trong토토 캔Và không có gì đảm bảo về ý chí nào đượ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 là trường hợp không nhạy cảm. Hai phần trích dẫnnullĐể coi nó là chuỗi thông thường"null".

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 đi qua nó như một hằng số theo nghĩa đen được trích dẫn, sau đó bất kỳ phương tiện nào ký tự và (tùy thuộc vào cài đặt củaStandard_Conforming_StringsCấu hình tham số) các ký tự dấu gạch chéo ngược 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ý chuỗi hằng số.

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

F.16.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-8, các chức năng trongBảng F-9.

Bảng F-8.토토 캔toán tử

Nhà điều hành Mô tả Ví dụ result
토토 캔 - Text Nhận giá trị cho khóa (nullNếu không có mặt) 'a = x, b = y' :: 토토 캔 - 'A' x
토토 캔 - Text [] Nhận giá trị cho các khóa (nullNếu không có) 'a = x, b = y, c = z ':: 토토 캔 - mảng [' c ',' a '] "z", "x"
토토 캔 || 토토 캔 Concatenate토토 캔S 'a = b, c = d' :: hstore || 'c = x, d = q' :: hstore "A" = "B", "C" = "X", "D" = "Q"
토토 캔 ? Text không토토 캔chứa khóa? 'A = 1' :: 토토 캔? 'Một' T
토토 캔 ? & Text [] không토토 캔chứa tất cả Khóa được chỉ định? 'a = 1, b = 2' :: 토토 캔 ? & Mảng ['a', 'b'] T
토토 캔 ? | Text [] không토토 캔chứa bất kỳ các khóa được chỉ định? 'a = 1, b = 2' :: 토토 캔? | Mảng ['b', 'c'] T
토토 캔 15529_15536 토토 캔 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
토토 캔 <@ 토토 캔 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 từ 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 phù hợp từ toán hạng bên trái 'a = 1, b = 2, C = 3 ':: 토토 캔 -' a = 4, b = 2 ':: hstore "A" = "1", "C" = "3"
Record #= 토토 캔 Thay thế các trường trongRecordVới Kết hợp các giá trị từ토토 캔 Xem ví dụ Phần
%% 토토 캔 Chuyển đổi토토 캔đến mảng của Khóa và giá trị xen kẽ %% 'a = foo, B = Bar ':: 토토 캔 a, foo, b, bar
%# 토토 캔 Chuyển đổi토토 캔đến Mảng khóa/giá trị hai chiều %# 'a = foo, B = Bar ':: 토토 캔 a, foo, b, bar

Lưu ý:Trước PostgreSQL 8.2, ngăn chặn người vận hành@<@được gọi là@~, tương ứng. Những cái tên này vẫn có sẵn, nhưng không được chấp nhận và cuối cùng sẽ được gỡ bỏ. Lưu ý rằng các tên cũ bị đảo ngược từ quy ước trước đây là dữ liệu hình học cốt lõi các loại!

Bảng F-9.토토 캔Chức năng

chức năng Loại trả lại Mô tả Ví dụ result
토토 캔 (ghi) 토토 캔 Xây dựng một토토 캔từ a Ghi lại hoặc hàng 토토 캔 (hàng (1,2)) f1 = 1, f2 = 2
토토 캔 (văn bản []) 토토 캔 Xây dựng một토토 캔Từ một mảng, có thể là một mảng khóa/giá trị hoặc một Mảng hai chiều 토토 캔 (mảng ['A', '1', 'B', '2'])) || hstore (mảng [['c', '3'], ['d', '4']])) a = 1, b = 2, c = 3, d = 4
토토 캔 (văn bản [], chữ[]) 토토 캔 Xây dựng토토 캔Từ Mảng khóa và giá trị riêng biệt 토토 캔 (mảng ['A', 'B'], Mảng ['1', '2']) "A" = "1", "B" = "2"
토토 캔 (văn bản, chữ) 토토 캔 Làm đơn lẻ토토 캔 토토 캔 ('A', 'B') "A" = "B"
Akeys (토토 캔) Text [] GET토토 캔s phím mảng akeys ('a = 1, b = 2') a, b
SKEYS (토토 캔) Setof Text get토토 캔21937_21967 SKEYS ('A = 1, B = 2')
a
B
Avals (토토 캔) Text [] GET토토 캔s giá trị mảng Avals ('a = 1, b = 2') 1,2
svals (토토 캔) Setof Text GET토토 캔s giá trị như một bộ svals ('a = 1, b = 2')
1
2
토토 캔_to_array (토토 캔) Text [] GET토토 캔Các phím và giá trị của Là 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 [] GET토토 캔'của các phím và giá trị Là một mảng hai chiều 토토 캔_to_matrix ('a = 1, b = 2') a, 1, b, 2
Slice (토토 캔, chữ[]) 토토 캔 Trích xuất một tập hợp con토토 캔 Slice ('a = 1, b = 2, c = 3' :: 토토 캔, Mảng ['b', 'c', 'x']) "B" = "2", "C" = "3"
mỗi (토토 캔) setof (văn bản chính, giá trị chữ) GET토토 캔các phím và giá trị như một tập hợp Chọn * Từ Mỗi ('a = 1, b = 2')
khóa | giá trị
-----+-------
 A | 1
 B | 2
tồn tại (토토 캔, văn bản) Boolean không토토 캔chứa khóa? tồn tại ('a = 1', 'a') T
Đã xác định (토토 캔, Text) Boolean không토토 캔chứa khôngnullGiá trị cho khóa? Đã xác định ('a = null', 'a') f
Xóa (토토 캔, văn bản) 토토 캔 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 phù hợp với các cặp trong lần thứ hai lý lẽ Xóa ('a = 1, b = 2', 'a = 4, b = 2' :: 토토 캔) "A" = "1"
Population_Record (Record, 토토 캔) Record Thay thế các trường trongRecordvới Kết hợp các giá trị từ토토 캔 Xem ví dụ Phần

Lưu ý:hàmPopulation_Recordthực sự được khai báo vớiAnyEuity, khôngRecord, như đối số đầu tiên của nó, nhưng nó sẽ từ chối các loại không ghi với lỗi thời gian chạy.

F.16.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 Test토토 캔 bằng Gist (h);

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

토토 캔cũng hỗ trợBtreehoặcHashChỉ 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. Loại Đặt hàng cho토토 캔Giá trị thì không đặc biệt hữu ích, nhưng các chỉ mục này có thể hữu ích cho 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.16.4. Ví dụ

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

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

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.16.5. Thống kê

The토토 캔Loại, vì nó Tự do nội tại, 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 Các ví dụ sau chứng minh một số kỹ thuật để kiểm tra Chìa 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:

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.16.6. Khả năng tương thích

Kể từ Postgresql 9.0,토토 캔Sử dụng a Đại diện nội bộ khác nhau so với các phiên bản trước. Cái này Không trình bày không có trở ngại cho việc nâng cấp kết xuất/khôi phục kể từ khi văn bản Biểu diễ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 hướng lên là đượ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. Nó là có thể buộc nâng cấp tất cả các giá trị trong cột bảng bằng cách đang làmCập nhậtCâu lệnh AS theo sau:

32341_32394

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

32468_32544

TheBẢNG ALTERPhương pháp yêu cầu một Khóa độc quyền trên bàn, nhưng không dẫn đến đầy hơi bảng có phiên bản hàng cũ.

F.16.7. 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