PostgreSQL: soi kèo bóng đá | |||
---|---|---|---|
prev | UP | Chương 50. Giao thức Frontend/phụ trợ | Tiếp theo |
Phần này mô tả luồng thông báo và ngữ nghĩa của mỗi loại kèo bóng đá pháp. (Chi tiết về biểu diễn chính xác của mỗi kèo bóng đá pháp xuất hiện trongPhần 50.5.) Có kèo bóng đá pháp số giao thức phụ khác nhau tùy thuộc vào trạng thái của kết nối: khởi động, truy vấn, gọi chức năng,sao chép, và chấm dứt. Ngoài ra còn có các quy định đặc biệt cho các hoạt động không đồng bộ (bao gồm các phản hồi kèo bóng đá pháp báo và hủy lệnh), có thể xảy ra bất cứ lúc nào sau giai đoạn khởi động.
Để bắt đầu phiên, Frontend mở kết nối đến máy chủ và gửi kèo bóng đá pháp khởi động. Thông báo này bao gồm tên của người dùng và cơ sở dữ liệu mà người dùng muốn kết nối; Nó cũng xác định phiên bản giao thức cụ thể sẽ được sử dụng. (Tùy chọn, thông báo khởi động có thể bao gồm các cài đặt bổ sung cho các tham số thời gian chạy.) Sau đó, máy chủ sử dụng thông tin này và nội dung của các tệp cấu hình của nó (chẳng hạn nhưpg_hba.conf) Để xác định xem kết nối có được chấp nhận tạm thời hay kèo bóng đá pháp và yêu cầu xác thực bổ sung nào (nếu có).
Máy chủ sau đó gửi một kèo bóng đá pháp báo yêu cầu xác thực phù hợp, mà Frontend phải trả lời với kèo bóng đá pháp báo phản hồi xác thực phù hợp (như mật khẩu). Đối với tất cả các phương thức xác thực ngoại trừ GSSAPI và SSPI, có nhiều nhất là một yêu cầu và một phản hồi. Trong một số phương pháp, không có phản hồi nào là cần thiết từ phía trước, và do đó không có yêu cầu xác thực xảy ra. Đối với GSSAPI và SSPI, có thể cần nhiều trao đổi gói để hoàn thành xác thực.
Chu kỳ xác thực kết thúc bằng máy chủ từ chối cố gắng kết nối (ErrorResponse) hoặc gửi xác thực.
Các kèo bóng đá pháp có thể từ máy chủ trong giai đoạn này là:
Nỗ lực kết nối đã bị từ chối. Máy chủ sau đó đóng ngay kết nối.
Trao đổi xác thực được hoàn thành thành công.
Frontend hiện phải tham gia hộp thoại xác thực Kerberos V5 (kèo bóng đá pháp được mô tả ở đây, một phần của đặc tả Kerberos) với máy chủ. Nếu điều này thành công, máy chủ sẽ phản hồi với xác thực, nếu kèo bóng đá pháp nó sẽ phản hồi bằng một lỗi. Điều này kèo bóng đá pháp còn được hỗ trợ nữa.
Frontend hiện phải gửi Mật khẩu có chứa mật khẩu ở dạng văn bản rõ ràng. Nếu đây là mật khẩu chính xác, máy chủ sẽ phản hồi bằng xác thực, nếu kèo bóng đá pháp nó sẽ trả lời với một errorResponse.
Frontend hiện phải gửi mật khẩu có chứa mật khẩu (có tên người dùng) được mã hóa qua MD5, sau đó được mã hóa lại bằng cách sử dụng muối ngẫu nhiên 4 byte được chỉ định trong kèo bóng đá pháp báo xác thựcMD5Password. Nếu đây là mật khẩu chính xác, máy chủ sẽ trả lời với xác thực, nếu không nó sẽ trả lời với ErrorResponse. Mật khẩu thực tế có thể được tính toán trong SQL làConcat ('MD5', MD5 (Concat (MD5 (Concat (Mật khẩu, tên người dùng)). (Hãy ghi nhớmd5 ()
hàm trả về kết quả của nó dưới dạng chuỗi hex.)
13490_14077
Frontend hiện phải bắt đầu đàm phán GSSAPI. Frontend sẽ gửi một mật khẩu với phần đầu tiên của luồng dữ liệu GSSAPI để đáp ứng với điều này. Nếu cần thêm kèo bóng đá pháp, máy chủ sẽ phản hồi với xác thựcgsscontinue.
Frontend hiện phải bắt đầu đàm phán SSPI. Frontend sẽ gửi một mật khẩu với phần đầu tiên của luồng dữ liệu SSPI để đáp ứng với điều này. Nếu cần thêm kèo bóng đá pháp, máy chủ sẽ phản hồi với xác thựcgsscontinue.
kèo bóng đá pháp báo này chứa dữ liệu phản hồi từ bước trước của đàm phán GSSAPI hoặc SSPI (xác thựcGSS, xác thựcspi hoặc xác thực trước đây). Nếu dữ liệu GSSAPI hoặc SSPI trong kèo bóng đá pháp báo này cho biết cần nhiều dữ liệu hơn để hoàn thành xác thực, thì frontend phải gửi dữ liệu đó dưới dạng mật khẩu khác. Nếu xác thực GSSAPI hoặc SSPI được hoàn thành bởi kèo bóng đá pháp báo này, máy chủ tiếp theo sẽ gửi xác thực để chỉ ra xác thực thành công hoặc errorResponse để chỉ ra lỗi.
Máy chủ không hỗ trợ phiên bản giao thức nhỏ được khách hàng yêu cầu, nhưng không hỗ trợ phiên bản trước của giao thức; kèo bóng đá pháp báo này cho biết phiên bản nhỏ được hỗ trợ cao nhất. kèo bóng đá pháp báo này cũng sẽ được gửi nếu khách hàng yêu cầu các tùy chọn giao thức không được hỗ trợ (nghĩa là, bắt đầu bằng_PQ_.) trong gói khởi động. kèo bóng đá pháp báo này sẽ được theo sau bởi ErrorResponse hoặc một kèo bóng đá pháp báo cho biết sự thành công hay thất bại của xác thực.
Nếu frontend kèo bóng đá pháp hỗ trợ phương thức xác thực được yêu cầu bởi máy chủ, thì nó sẽ ngay lập tức đóng kết nối.
15924_16416
Trong giai đoạn này, phụ trợ sẽ cố gắng áp dụng bất kỳ cài đặt tham số thời gian chạy bổ sung nào được đưa ra trong kèo bóng đá pháp báo khởi động. Nếu thành công, các giá trị này sẽ trở thành mặc định phiên. Lỗi gây ra errorResponse và exit.
Các kèo bóng đá pháp có thể từ phần phụ trợ trong giai đoạn này là:
Thông báo này cung cấp dữ liệu khóa bí mật mà frontend phải lưu nếu muốn có thể đưa ra các yêu cầu hủy sau này. Frontend không nên trả lời kèo bóng đá pháp này, nhưng sẽ tiếp tục nghe một kèo bóng đá pháp ReadyForQuery.
kèo bóng đá pháp báo này kèo bóng đá pháp báo cho Frontend về cài đặt (ban đầu) hiện tại của các tham số phụ trợ, chẳng hạn nhưclient_encodinghoặcDatestyle. Frontend có thể bỏ qua kèo bóng đá pháp báo này hoặc ghi lại các cài đặt để sử dụng trong tương lai; nhìn thấyPhần 50.2.6Để biết thêm chi tiết. Frontend không nên trả lời kèo bóng đá pháp này, nhưng sẽ tiếp tục nghe một kèo bóng đá pháp ReadyForQuery.
Khởi nghiệp được hoàn thành. Frontend hiện có thể phát hành kèo bóng đá pháp lệnh.
Khởi nghiệp không thành công. Kết nối được đóng sau khi gửi kèo bóng đá pháp này.
Một kèo bóng đá pháp điệp cảnh báo đã được ban hành. Frontend sẽ hiển thị kèo bóng đá pháp báo nhưng tiếp tục nghe ReadyForQuery hoặc ErrorResponse.
17990_18299
Một chu trình truy vấn đơn giản được bắt đầu bởi frontend gửi một thông báo truy vấn đến phần phụ trợ. Thông báo bao gồm một lệnh SQL (hoặc lệnh) được thể hiện dưới dạng chuỗi văn bản. Phần phụ trợ sau đó gửi một hoặc nhiều kèo bóng đá pháp phản hồi tùy thuộc vào nội dung của chuỗi lệnh truy vấn và cuối cùng là một thông báo phản hồi ReadyForQuery. ReadyForQuery thông báo cho Frontend rằng nó có thể gửi một lệnh mới một cách an toàn. .
kèo bóng đá pháp báo phản hồi có thể từ phần phụ trợ là:
lệnh SQL hoàn thành bình thường.
Phần phụ trợ đã sẵn sàng sao chép dữ liệu từ phía trước sang bảng; nhìn thấyPhần 50.2.5.
Phần phụ trợ đã sẵn sàng sao chép dữ liệu từ bảng đến mặt trận; nhìn thấyPhần 50.2.5.
chỉ ra rằng kèo bóng đá pháp hàng sắp được trả lại để đáp ứng với AChọn, Fetch, vv Truy vấn. Nội dung của kèo bóng đá pháp báo này mô tả bố cục cột của các hàng. Điều này sẽ được theo sau bởi một kèo bóng đá pháp báo Datarow cho mỗi hàng được trả về phía trước.
kèo bóng đá pháp trong những hàng hàng được trả về bởi AChọn, Fetch, ETC truy vấn.
kèo bóng đá pháp chuỗi truy vấn trống đã được nhận ra.
Đã xảy ra lỗi.
Xử lý chuỗi truy vấn đã hoàn tất. Một kèo bóng đá pháp báo riêng được gửi để cho biết điều này vì chuỗi truy vấn có thể chứa nhiều lệnh SQL. .
Một kèo bóng đá pháp báo cảnh báo đã được đưa ra liên quan đến truy vấn. Các kèo bóng đá pháp báo ngoài các câu trả lời khác, tức là, phần phụ trợ sẽ tiếp tục xử lý lệnh.
Phản hồi cho AChọnTruy vấn (hoặc kèo bóng đá pháp truy vấn khác trả về kèo bóng đá pháp bộ hàng, chẳng hạn nhưGiải thíchhoặcshow20979_21077CopyĐến hoặc từ Frontend gọi giao thức đặc biệt như được mô tả trongPhần 50.2.5. Tất cả các loại truy vấn khác thường chỉ tạo ra một kèo bóng đá pháp báo CommandComplete.
Vì kèo bóng đá pháp chuỗi truy vấn có thể chứa kèo bóng đá pháp số truy vấn (được phân tách bằng dấu chấm phẩy), nên có thể có kèo bóng đá pháp số chuỗi phản hồi như vậy trước khi kết thúc phụ trợ xử lý chuỗi truy vấn. ReadyForQuery được phát hành khi toàn bộ chuỗi đã được xử lý và phụ trợ đã sẵn sàng để chấp nhận kèo bóng đá pháp chuỗi truy vấn mới.
21621_21768
Trong trường hợp có lỗi, ErrorResponse được cấp theo sau là ReadyForQuery. Tất cả việc xử lý tiếp theo của chuỗi truy vấn đều bị hủy bỏ bởi ErrorResponse (ngay cả khi vẫn còn nhiều truy vấn trong đó). Lưu ý rằng điều này có thể xảy ra một phần thông qua chuỗi các kèo bóng đá pháp được tạo bởi một truy vấn riêng lẻ.
Trong chế độ truy vấn đơn giản, định dạng của kèo bóng đá pháp giá trị truy xuất luôn luôn là văn bản, ngoại trừ khi lệnh đã cho làFetchTừ con trỏ được khai báo vớinhị phânTùy chọn. Trong trường hợp đó, các giá trị được truy xuất ở định dạng nhị phân. Các mã định dạng được đưa ra trong kèo bóng đá pháp báo Rowdescrip cho biết định dạng nào đang được sử dụng.
Một frontend phải được chuẩn bị để chấp nhận các kèo bóng đá pháp ErrorResponse và NoticeResponse bất cứ khi nào nó mong đợi bất kỳ loại kèo bóng đá pháp nào khác. Xem thêmPhần 50.2.6Liên quan đến các kèo bóng đá pháp mà phần phụ trợ có thể tạo do các sự kiện bên ngoài.
22713_22925
Giao thức truy vấn mở rộng chia nhỏ giao thức truy vấn đơn giản được mô tả ở trên thành nhiều bước. Kết quả của kèo bóng đá pháp bước chuẩn bị có thể được sử dụng lại nhiều lần để cải thiện hiệu quả. Hơn nữa, kèo bóng đá pháp tính năng bổ sung có sẵn, chẳng hạn như khả năng cung cấp kèo bóng đá pháp giá trị dữ liệu dưới dạng kèo bóng đá pháp tham số riêng biệt thay vì phải chèn chúng trực tiếp vào chuỗi truy vấn.
23452_23974
Lưu ý:24037_24201$n) Được sử dụng trong chuỗi truy vấn. kèo bóng đá pháp trường hợp đặc biệt khác là loại tham số có thể được chỉ định làvoid(nghĩa là oid củavoidPseudotype). Điều này có nghĩa là để cho phép các ký hiệu tham số được sử dụng cho các tham số chức năng thực sự là các tham số. kèo bóng đá pháp thường không có bối cảnh trong đó mộtvoid24624_24787foo ($ 1, $ 2, $ 3, $ 4)có thể khớp với kèo bóng đá pháp hàm với hai trong và hai đối số ra, nếu$ 3và$ 4được chỉ định là có loạivoid.
Lưu ý:Chuỗi truy vấn có trong kèo bóng đá pháp báo phân tích không thể bao gồm nhiều câu lệnh SQL; khác là một lỗi cú pháp được báo cáo. Hạn chế này không tồn tại trong giao thức Trận đấu đơn giản, nhưng nó tồn tại trong giao thức mở rộng, bởi vì cho phép các câu lệnh hoặc cổng được chuẩn bị chứa nhiều lệnh sẽ làm phức tạp giao thức.
Nếu được tạo thành công, một đối tượng đã chuẩn bị được đặt tên kéo dài cho đến cuối phiên hiện tại, trừ khi bị phá hủy rõ ràng. Một tuyên bố được chuẩn bị kèo bóng đá pháp tên chỉ kéo dài cho đến khi câu lệnh phân tích điện phân tiếp theo chỉ định câu lệnh kèo bóng đá pháp tên là đích được đưa ra. . Các câu lệnh đã chuẩn bị cũng có thể được tạo và truy cập ở cấp lệnh SQL, sử dụngChuẩn bịvàthực thi.
Một khi một câu lệnh đã chuẩn bị tồn tại, nó có thể được chuẩn bị để thực thi bằng kèo bóng đá pháp liên kết. Thông báo ràng buộc cho biết tên của câu lệnh được chuẩn bị nguồn (chuỗi trống biểu thị câu lệnh đã chuẩn bị không tên), tên của cổng thông tin đích (chuỗi trống biểu thị cổng thông tin không tên) và các giá trị sẽ sử dụng cho bất kỳ người giữ chỗ tham số nào có trong câu lệnh đã chuẩn bị. Bộ tham số được cung cấp phải phù hợp với các thông số cần thiết bởi câu lệnh đã chuẩn bị. (Nếu bạn đã khai báo bất kỳvoidtham số trong kèo bóng đá pháp báo phân tích, truyền các giá trị null cho chúng trong kèo bóng đá pháp báo liên kết.) Liên kết cũng chỉ định định dạng để sử dụng cho bất kỳ dữ liệu nào được trả về bởi truy vấn; Định dạng có thể được chỉ định tổng thể, hoặc trên mỗi cột. Phản hồi là BindComplete hoặc ErrorResponse.
Lưu ý:Sự lựa chọn giữa văn bản và đầu ra nhị phân được xác định bởi kèo bóng đá pháp mã định dạng được đưa ra trong ràng buộc, bất kể lệnh SQL liên quan. Thenhị phânThuộc tính trong khai báo con trỏ là kèo bóng đá pháp liên quan khi sử dụng giao thức truy vấn mở rộng.
Kế hoạch truy vấn thường xảy ra khi kèo bóng đá pháp báo liên kết được xử lý. Nếu câu lệnh đã chuẩn bị không có tham số hoặc được thực thi nhiều lần, máy chủ có thể lưu gói đã tạo và sử dụng lại nó trong các kèo bóng đá pháp báo ràng buộc tiếp theo cho cùng một câu lệnh đã chuẩn bị. Tuy nhiên, nó sẽ chỉ làm như vậy nếu nó thấy rằng một kế hoạch chung có thể được tạo ra không kém hiệu quả hơn nhiều so với kế hoạch phụ thuộc vào các giá trị tham số cụ thể được cung cấp. Điều này xảy ra trong suốt cho đến khi giao thức có liên quan.
Nếu được tạo thành công, một đối tượng cổng thông kèo bóng đá pháp có tên kéo dài cho đến khi kết thúc giao dịch hiện tại, trừ khi bị phá hủy rõ ràng. Một cổng thông kèo bóng đá pháp không tên bị phá hủy vào cuối giao dịch hoặc ngay khi câu lệnh liên kết tiếp theo chỉ định cổng thông kèo bóng đá pháp không tên là đích được phát hành. . Các cổng được đặt tên cũng có thể được tạo và truy cập ở cấp lệnh SQL, sử dụngTuyên bố con trỏvàFetch.
28386_28588"Tìm nạp tất cả kèo bóng đá pháp hàng"). Số lượng hàng kết quả chỉ có ý nghĩa đối với các cổng chứa các lệnh trả về các bộ hàng; Trong các trường hợp khác, lệnh luôn được thực thi để hoàn thành và số lượng hàng bị bỏ qua. Các câu trả lời có thể xảy ra đối với thực thi giống như những câu trả lời được mô tả ở trên cho các truy vấn được phát hành kèo bóng đá pháp qua giao thức truy vấn đơn giản, ngoại trừ việc thực thi không khiến ReadyForQuery hoặc Rowdes mô tả.
29022_29673
Khi hoàn thành mỗi loạt các kèo bóng đá pháp trình độ mở rộng, Frontend sẽ phát hành kèo bóng đá pháp đồng bộ hóa. Thông báo không tham số này khiến phần phụ trợ đóng giao dịch hiện tại nếu nó không ở trongBắt đầu/cam kếtKhối giao dịch ("Đóng"29994_30462trong khiXử lý đồng bộ hóa - Điều này đảm bảo rằng có kèo bóng đá pháp và chỉ có kèo bóng đá pháp Sẵn sàng được gửi cho mỗi lần đồng bộ
Lưu ý:SYNC kèo bóng đá pháp gây ra khối giao dịch được mở bằngBắt đầusẽ được đóng. Có thể phát hiện tình huống này vì thông báo ReadyForQuery bao gồm thông kèo bóng đá pháp trạng thái giao dịch.
Ngoài các hoạt động cơ bản, cần thiết này, còn có kèo bóng đá pháp số hoạt động tùy chọn có thể được sử dụng với giao thức trình điều khiển mở rộng.
Thông báo mô tả (biến thể cổng thông tin) Chỉ định tên của một cổng thông tin hiện có (hoặc một chuỗi trống cho cổng thông tin không tên). Phản hồi là một thông báo Rowdes mô tả các hàng sẽ được trả về bằng cách thực hiện cổng thông tin; hoặc kèo bóng đá pháp NODATA nếu cổng thông tin không chứa truy vấn sẽ trả về hàng; hoặc errorResponse nếu không có cổng thông tin như vậy.
kèo bóng đá pháp báo mô tả (biến thể câu lệnh) Chỉ định tên của một câu lệnh đã chuẩn bị hiện có (hoặc một chuỗi trống cho câu lệnh đã chuẩn bị không tên). Phản hồi là một kèo bóng đá pháp báo tham số mô tả các tham số cần thiết cho câu lệnh, theo sau là kèo bóng đá pháp báo ROWDES mô tả các hàng sẽ được trả về khi câu lệnh cuối cùng được thực thi (hoặc kèo bóng đá pháp báo NODATA nếu câu lệnh sẽ không trả lại hàng). ErrorResponse được ban hành nếu không có tuyên bố đã chuẩn bị như vậy. Lưu ý rằng vì ràng buộc chưa được ban hành, các định dạng sẽ được sử dụng cho các cột được trả về vẫn chưa được biết đến phụ trợ; Các trường mã định dạng trong kèo bóng đá pháp báo Rowdescrip sẽ là 0 trong trường hợp này.
Tip:Trong hầu hết các kịch bản, Frontend nên đưa ra kèo bóng đá pháp hoặc biến thể khác của mô tả trước khi phát hành thực thi, để đảm bảo rằng nó biết cách diễn giải kết quả mà nó sẽ quay lại.
Thông điệp gần gũi đóng một câu lệnh hoặc cổng thông kèo bóng đá pháp đã chuẩn bị hiện có và phát hành tài nguyên. Nó không phải là một lỗi để phát hành gần với câu lệnh hoặc tên cổng thông kèo bóng đá pháp không tồn tại. Phản hồi thường kết thúc, nhưng có thể là ErrorResponse nếu gặp một số khó khăn trong khi phát hành tài nguyên. Lưu ý rằng việc đóng một câu lệnh đã chuẩn bị hoàn toàn đóng bất kỳ cổng mở nào được xây dựng từ câu lệnh đó.
Thông báo Flush không gây ra bất kỳ đầu ra cụ thể nào được tạo, nhưng buộc phần phụ trợ để cung cấp bất kỳ dữ liệu nào đang chờ xử lý trong bộ đệm đầu ra của nó. Một tuôn ra phải được gửi sau khi bất kỳ lệnh trình độ mở rộng nào ngoại trừ đồng bộ hóa, nếu frontend muốn kiểm tra kết quả của lệnh đó trước khi ban hành nhiều lệnh hơn. Nếu không có Flush, các kèo bóng đá pháp được trả về bởi phần phụ trợ sẽ được kết hợp vào số lượng gói tối thiểu có thể để giảm thiểu chi phí mạng.
Lưu ý:Thông báo truy vấn đơn giản xấp xỉ tương đương với chuỗi phân tích, BIND, Cổng mô tả, thực thi, đóng, đồng bộ hóa, sử dụng câu lệnh đã chuẩn bị không được đặt tên và đối tượng cổng thông tin và không có tham số. Một điểm khác biệt là nó sẽ chấp nhận nhiều câu lệnh SQL trong chuỗi truy vấn, tự động thực hiện trình tự BIND/MÔ TẢ/thực thi cho mỗi câu liên tiếp. Một điểm khác biệt khác là nó sẽ không trả về các kèo bóng đá pháp Parsecomplete, BindComplete, CloseComplete hoặc Nodata.
Hàm gọi phụ cho phép máy khách yêu cầu gọi trực tiếp của bất kỳ chức năng nào tồn tại trong cơ sở dữ liệuPG_PROCDanh mục hệ thống. Máy khách phải có quyền thực thi cho chức năng.
Lưu ý:34227_34405Chọn chức năng ($ 1, ...). Chu trình cuộc gọi chức năng sau đó có thể được thay thế bằng BIND/EXECUTE.
34546_34880
34886_34940
Đã xảy ra lỗi.
Cuộc gọi chức năng đã được hoàn thành và trả về kết quả được đưa ra trong kèo bóng đá pháp. (Lưu ý rằng giao thức cuộc gọi chức năng chỉ có thể xử lý một kết quả vô hướng, không phải là loại hàng hoặc tập hợp kết quả.)
Xử lý cuộc gọi chức năng đã hoàn tất. ReadyForQuery sẽ luôn được gửi, cho dù việc xử lý chấm dứt thành công hay với lỗi.
35492_35661
TheCopyLệnh cho phép truyền dữ liệu hàng loạt tốc độ cao đến hoặc từ máy chủ. Các hoạt động sao chép và sao chép mỗi lần chuyển kết nối thành kèo bóng đá pháp giao thức phụ riêng biệt, kéo dài cho đến khi hoạt động hoàn tất.
Chế độ sao chép (truyền dữ liệu vào máy chủ) được bắt đầu khi phần phụ trợ thực thi ASao chép từ StdinTuyên bố SQL. Phần phụ trợ gửi một thông báo copyInresponse đến frontend. Frontend sau đó sẽ gửi kèo bóng đá pháp CopyData bằng 0 hoặc nhiều hơn, tạo thành một luồng dữ liệu đầu vào. .CopyCâu lệnh SQL kèo bóng đá pháp thành công với lỗi). Phần phụ trợ sau đó trở lại chế độ xử lý lệnh mà nó đã ở trướcCopyBắt đầu, sẽ là giao thức truy vấn đơn giản hoặc mở rộng. Tiếp theo nó sẽ gửi một trong hai CommandComplete (nếu thành công) hoặc errorResponse (nếu kèo bóng đá pháp).
36965_37127Copy37154_37361CopyLệnh đã được cấp trong một thông báo truy vấn đơn giản, phần còn lại của kèo bóng đá pháp đó bị loại bỏ và ReadyForQuery được phát hành. Trong cả hai trường hợp, bất kỳ kèo bóng đá pháp copyData, copyDone hoặc copyfail nào tiếp theo do frontend ban hành sẽ đơn giản là bị loại bỏ.
Phần phụ trợ sẽ bỏ qua các kèo bóng đá pháp tuôn ra và đồng bộ hóa nhận được trong chế độ sao chép. Nhận bất kỳ loại kèo bóng đá pháp không sao chép nào khác tạo thành một lỗi sẽ hủy bỏ trạng thái sao chép như được mô tả ở trên. .Sao chép từ Stdin.)
Chế độ sao chép (truyền dữ liệu từ máy chủ) được bắt đầu khi phần phụ trợ thực thiSao chép vào stdout38191_38434CopyBắt đầu và gửi CommandComplete. Frontend không thể hủy bỏ việc chuyển nhượng (ngoại trừ bằng cách đóng kết nối hoặc đưa ra yêu cầu hủy), nhưng nó có thể loại bỏ các kèo bóng đá pháp copyData và copyDone không mong muốn.
Trong trường hợp lỗi được phát hiện theo phụ trợ trong chế độ sao chép, phụ trợ sẽ phát hành kèo bóng đá pháp báo ErrorResponse và trở lại xử lý kèo bóng đá pháp thường. Frontend nên coi việc nhận của ErrorResponse là chấm dứt chế độ sao chép.
Có thể kèo bóng đá pháp noticeResponse và parameterstatus được xen kẽ giữa các kèo bóng đá pháp copyData; Frontends phải xử lý các trường hợp này và cũng nên được chuẩn bị cho các loại kèo bóng đá pháp không đồng bộ khác (xemPhần 50.2.6). Nếu không, bất kỳ loại kèo bóng đá pháp nào khác ngoài COPYDATA hoặc COPYDONE có thể được coi là Chế độ sao chép kết thúc.
Có kèo bóng đá pháp chế độ liên quan đến bản sao khác được gọi là Copy-Both, cho phép truyền dữ liệu hàng loạt tốc độ cao sangvà39442_39534start_ReplicationCâu lệnh. Phần phụ trợ gửi một kèo bóng đá pháp copybothresponse đến frontend. Cả phụ trợ và frontend sau đó có thể gửi kèo bóng đá pháp copyData cho đến khi một trong hai đầu gửi kèo bóng đá pháp copyDone. Sau khi khách hàng gửi kèo bóng đá pháp CopyDone, kết nối chuyển từ chế độ sao chép-chế độ sao chép sang chế độ sao chép và máy khách không được gửi thêm bất kỳ kèo bóng đá pháp copyData nào. Tương tự, khi máy chủ gửi kèo bóng đá pháp CopyDone, kết nối sẽ chuyển sang chế độ sao chép và máy chủ không được gửi thêm bất kỳ kèo bóng đá pháp CopyData nào. Sau khi cả hai bên đã gửi một thông báo copyDone, chế độ sao chép bị chấm dứt và phần phụ trợ trở lại chế độ xử lý lệnh. Trong trường hợp lỗi được phát hiện theo hướng phụ trợ trong chế độ sao chép-cả, phần phụ trợ sẽ phát hành kèo bóng đá pháp ErrorResponse, loại bỏ các kèo bóng đá pháp phía trước cho đến khi nhận được kèo bóng đá pháp đồng bộ hóa, sau đó đưa ra ReadyForQuery và trở lại xử lý thông thường. Frontend nên coi việc nhận của ErrorResponse là chấm dứt bản sao theo cả hai hướng; Không có sao chép nên được gửi trong trường hợp này. Nhìn thấyPhần 50.3Để biết thêm thông kèo bóng đá pháp về Subrotocol được truyền qua chế độ sao chép-cả.
kèo bóng đá pháp CopyInresponse, CopyouTresponse và CopyBothResponse bao gồm các trường thông báo cho số lượng cột mỗi hàng và mã định dạng được sử dụng cho mỗi cột. (Kể từ khi triển khai hiện tại, tất cả các cột trong một đã choCopyHoạt động sẽ sử dụng cùng một định dạng, nhưng thiết kế kèo bóng đá pháp không giả định điều này.)
Có một số trường hợp phụ trợ sẽ gửi kèo bóng đá pháp không được nhắc cụ thể bởi luồng lệnh của Frontend. Frontends phải được chuẩn bị để đối phó với các kèo bóng đá pháp này bất cứ lúc nào, ngay cả khi không tham gia vào một truy vấn. Tối thiểu, người ta nên kiểm tra các trường hợp này trước khi bắt đầu đọc phản hồi truy vấn.
Có thể tạo các kèo bóng đá pháp báo của NoticeResponse được tạo do hoạt động bên ngoài; Ví dụ: nếu quản trị viên cơ sở dữ liệu ra lệnh"Fast"Tắt cơ sở dữ liệu, phần phụ trợ sẽ gửi một NoticeResponse cho biết thực tế này trước khi đóng kết nối. Theo đó, Frontends phải luôn luôn được chuẩn bị để chấp nhận và hiển thị các kèo bóng đá pháp báo NoticeResponse, ngay cả khi kết nối không hoạt động.
41957_42158set42184_42403SIGHUPTín hiệu cho máy chủ. Ngoài ra, nếu kèo bóng đá phápsetLệnh được quay lại, một kèo bóng đá pháp báo tham số thích hợp sẽ được tạo để báo cáo giá trị hiệu quả hiện tại.
Hiện tại có kèo bóng đá pháp bộ tham số có dây cứng mà tham số sẽ được tạo ra: chúng làserver_version, server_encoding, client_encoding, application_name, is_superuser, session_Authorization, Datestyle, IntervalStyle, timezone, integer_datetimesvàStandard_Conforming_Strings. (server_encoding, timezonevàinteger_datetimeskèo bóng đá pháp được báo cáo bởi các bản phát hành trước 8.0;Standard_Conforming_Stringskèo bóng đá pháp được báo cáo bởi các bản phát hành trước 8.1;IntervalStylekèo bóng đá pháp được báo cáo bởi các bản phát hành trước 8.4;application_namekèo bóng đá pháp được báo cáo bởi các bản phát hành trước 9.0.) Lưu ý rằngserver_version, server_encodingvàinteger_datetimeslà các tham số giả kèo bóng đá pháp thể thay đổi sau khi khởi động. Bộ này có thể thay đổi trong tương lai, hoặc thậm chí trở thành cấu hình. Theo đó, một frontend chỉ cần bỏ qua tham số cho các tham số mà nó kèo bóng đá pháp hiểu hoặc quan tâm.
44014_44039Nghe44068_44191kèo bóng đá pháp báoLệnh được thực thi cho cùng tên kênh.
Lưu ý:Hiện tại, kèo bóng đá pháp báo chỉ có thể được gửi bên ngoài một giao dịch và do đó nó sẽ không xảy ra ở giữa một chuỗi phản hồi lệnh, mặc dù nó có thể xảy ra ngay trước khi ReadyForQuery. Tuy nhiên, không khôn ngoan khi thiết kế logic frontend giả định rằng, tuy nhiên. Thực tiễn tốt là có thể chấp nhận kèo bóng đá pháp báoResponse tại bất kỳ điểm nào trong giao thức.
Trong quá trình xử lý truy vấn, frontend có thể yêu cầu hủy truy vấn. Yêu cầu Hủy kèo bóng đá pháp được gửi trực tiếp trên kết nối mở đến phần phụ trợ vì lý do hiệu quả thực hiện: Chúng tôi kèo bóng đá pháp muốn có phần phụ trợ liên tục kiểm tra đầu vào mới từ phía trước trong quá trình xử lý truy vấn. Hủy yêu cầu phải tương đối kèo bóng đá pháp thường xuyên, vì vậy chúng tôi làm cho chúng hơi cồng kềnh để tránh hình phạt trong trường hợp bình thường.
Để đưa ra yêu cầu Hủy, Frontend mở kết nối mới đến máy chủ và gửi kèo bóng đá pháp DECCEQUEST, thay vì thông báo startupMessage thường được gửi qua kết nối mới. Máy chủ sẽ xử lý yêu cầu này và sau đó đóng kết nối. Vì lý do bảo mật, không có câu trả lời trực tiếp nào được thực hiện cho thông báo yêu cầu hủy.
45654_46061
Tín hiệu hủy có thể hoặc có thể không có bất kỳ ảnh hưởng nào - ví dụ, nếu nó đến sau khi phần phụ trợ đã hoàn tất việc xử lý truy vấn, thì nó sẽ không có tác dụng. Nếu hủy bỏ có hiệu lực, nó sẽ dẫn đến lệnh hiện tại bị chấm dứt sớm với kèo bóng đá pháp báo lỗi.
Kết quả của tất cả điều này là vì lý do của cả bảo mật và hiệu quả, mặt tiền không có cách trực tiếp nào để biết liệu một yêu cầu hủy có thành công hay không. Nó phải tiếp tục chờ đợi phần phụ trợ để trả lời truy vấn. Việc hủy bỏ chỉ đơn giản là cải thiện tỷ lệ cược mà truy vấn hiện tại sẽ sớm hoàn thành và cải thiện tỷ lệ cược sẽ thất bại với kèo bóng đá pháp báo lỗi thay vì thành công.
Vì yêu cầu hủy được gửi qua kết nối mới đến máy chủ chứ không phải trên liên kết giao tiếp phía trước/phụ trợ kèo bóng đá pháp thường, nên có thể yêu cầu hủy được cấp bởi bất kỳ quy trình nào, không chỉ là truy vấn của họ sẽ bị hủy. Điều này có thể cung cấp tính linh hoạt bổ sung khi xây dựng các ứng dụng nhiều quá trình. Nó cũng đưa ra một rủi ro bảo mật, trong đó những người trái phép có thể cố gắng hủy các truy vấn. Rủi ro bảo mật được giải quyết bằng cách yêu cầu khóa bí mật được tạo động để được cung cấp trong các yêu cầu hủy bỏ.
Quy trình chấm dứt bình thường, duyên dáng là Frontend gửi kèo bóng đá pháp chấm dứt và ngay lập tức đóng kết nối. Khi nhận được kèo bóng đá pháp này, phụ trợ đóng kết nối và chấm dứt.
Trong các trường hợp hiếm hoi (chẳng hạn như tắt máy cơ sở dữ liệu được quản lý), phần phụ trợ có thể ngắt kết nối mà không cần bất kỳ yêu cầu nào để làm như vậy. Trong những trường hợp như vậy, phụ trợ sẽ cố gắng gửi một lỗi hoặc kèo bóng đá pháp báo kèo bóng đá pháp báo đưa ra lý do cho sự ngắt kết nối trước khi nó đóng kết nối.
Các kịch bản chấm dứt khác phát sinh từ các trường hợp thất bại khác nhau, chẳng hạn như kết xuất lõi ở đầu này hay đầu kia, mất liên kết liên lạc, mất đồng bộ hóa liên kết kèo bóng đá pháp, v.v. Frontend có tùy chọn khởi chạy một phụ trợ mới bằng cách giới thiệu lại máy chủ nếu nó không muốn tự chấm dứt. Đóng kết nối cũng được khuyến khích nếu nhận được một loại kèo bóng đá pháp không thể nhận ra, vì điều này có thể cho thấy mất đồng bộ hóa giới hạn kèo bóng đá pháp.
Đối với việc chấm dứt bình thường hoặc bất thường, bất kỳ giao dịch mở nào được quay lại, kèo bóng đá pháp cam kết. Tuy nhiên, người ta nên lưu ý rằng nếu một frontend ngắt kết nối trong khi kèo bóng đá phápChọnTruy vấn đang được xử lý, phần phụ trợ có thể sẽ hoàn thành truy vấn trước khi nhận thấy sự ngắt kết nối. Nếu truy vấn nằm ngoài bất kỳ khối giao dịch nào (bắt đầu...cam kết48909_48997
nếuPOSTGRESQLđược xây dựng vớiSSLHỗ trợ, giao tiếp phía trước/phụ trợ có thể được mã hóa bằng cách sử dụngSSL. Điều này cung cấp bảo mật truyền thông trong các môi trường nơi những kẻ tấn công có thể nắm bắt lưu lượng phiên. Để biết thêm thông kèo bóng đá pháp về mã hóaPostgreSQLPhiên vớiSSL, xemPhần 17.9.
Để bắt đầuSSLKết nối -Crypted, Frontend ban đầu gửi kèo bóng đá pháp SSLRequest thay vì StartupMessage. Máy chủ sau đó trả lời với một byte duy nhất có chứaShoặcn, chỉ ra rằng nó sẵn sàng hoặc kèo bóng đá pháp muốn thực hiệnSSL50025_50156S, thực hiệnSSLbắt tay khởi động (kèo bóng đá pháp được mô tả ở đây, một phần củaSSLĐặc điểm kỹ thuật) với máy chủ. Nếu điều này thành công, tiếp tục gửi cho StartupMessage kèo bóng đá pháp thường. Trong trường hợp này, startupMessage và tất cả các dữ liệu tiếp theo sẽ làSSL-encrypted. Để tiếp tục sau50577_50580, Gửi phần khởi động kèo bóng đá pháp thường và tiến hành mà không cần mã hóa.
Frontend cũng nên được chuẩn bị để xử lý phản hồi ErrorMessage với SSLRequest từ máy chủ. Điều này sẽ chỉ xảy ra nếu máy chủ có trước việc bổ sungSSLHỗ trợ choPostgreSQL. .SSL.
51174_51284
Trong khi bản thân giao thức kèo bóng đá pháp cung cấp cách để máy chủ buộcSSLMã hóa, Quản trị viên có thể định cấu hình máy chủ để từ chối các phiên kèo bóng đá pháp được mã hóa dưới dạng sản phẩm phụ của kiểm tra xác thực.