Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 48. Giao thức frontend/phụ trợ | NEXT |
Phần này mô tả luồng thông báo và ngữ nghĩa của mỗi loại tỷ lệ kèo bóng đá. (Chi tiết về đại diện chính xác của mỗi thông báo xuất hiện trongPhần 48,5.) Có tỷ lệ kèo bóng đá 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,Copy, và chấm dứt. Ngoài ra còn có các điều khoản đặc biệt cho các hoạt động không đồng bộ (bao gồm cả phản hồi tỷ lệ kèo bóng đá 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.
10645_11079pg_hba.conf) Để xác định xem kết nối có phải là có thể chấp nhận tạm thời và xác thực bổ sung là gì bắt buộc (nếu có).
11246_11728
Chu kỳ xác thực kết thúc bằng máy chủ hoặc từ chối cố gắng kết nối (errorResponse) hoặc gửi Xác thực.
Các tỷ lệ kèo bóng đá 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 đó ngay lập tức đóng kết nối.
Trao đổi xác thực được hoàn thành thành công.
12241_12501
Frontend hiện phải gửi mật khẩu 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ủ phản hồi với xác thực, nếu không nó phản hồi với tỷ lệ kèo bóng đá errorResponse.
Frontend hiện phải gửi mật khẩu
Mật khẩu (với tên người dùng) được mã hóa qua MD5, sau đó được mã hóa lại
sử dụng muối ngẫu nhiên 4 byte được chỉ định trong
tỷ lệ kèo bóng đá báo xác thựcMD5Password. Nếu đây là mật khẩu chính xác,
máy chủ phản hồi với xác thực, nếu không nó phản hồi
với một 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)), ngẫu nhiên-salt))).
(Hãy ghi nhớmd5 ()
Hàm
trả về kết quả của nó dưới dạng chuỗi hex.)
Phản hồi này chỉ có thể đối với các kết nối miền đơn vị cục bộ Trên các nền tảng hỗ trợ tỷ lệ kèo bóng đá chứng thực SCM. Mặt trận Phải phát hành tỷ lệ kèo bóng đá thông tin xác thực SCM và sau đó gửi một dữ liệu Byte. (Nội dung của byte dữ liệu không thú vị; nó chỉ được sử dụng để đảm bảo rằng máy chủ chờ đủ lâu để nhận Thông báo thông tin đăng nhập.) Nếu thông tin xác thực được chấp nhận, máy chủ trả lời bằng xác thực, nếu không nó trả lời với Errorresponse. (Loại tỷ lệ kèo bóng đá này chỉ được cấp bởi Pre-9.1 Máy chủ. Cuối cùng nó có thể được xóa khỏi giao thức Đặc điểm kỹ thuật.)
Frontend hiện phải bắt đầu đàm phán GSSAPI. Các Frontend sẽ gửi Mật khẩuMessage 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 thêm tỷ lệ kèo bóng đá Cần thiết, 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. Mặt trận sẽ gửi mật khẩu với phần đầu tiên của dữ liệu SSPI phát trực tuyến để đáp ứng với điều này. Nếu cần thêm tỷ lệ kèo bóng đá, Máy chủ sẽ phản hồi với xác thựcgsscontinue.
Thông báo này chứa dữ liệu phản hồi từ bước trước của cuộc đàm phán GSSAPI hoặc SSPI (xác thựcgss, Xác thựcspi hoặc xác thực trước đâygsscontinue). Nếu Dữ liệu GSSAPI hoặc SSPI trong thông báo này cho biết cần nhiều dữ liệu hơn Để hoàn thành xác thực, 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 là hoàn thành bởi tỷ lệ kèo bóng đá này, máy chủ sẽ gửi tiếp theo Xác thực để chỉ ra xác thực thành công hoặc ErrorResponse to cho biết thất bại.
Máy chủ không hỗ trợ phiên bản giao thức phụ được yêu cầu bởi khách hàng, nhưng không hỗ trợ phiên bản trước của giao thức; Thông báo này cho biết phiên bản nhỏ được hỗ trợ cao nhất. Cái này tỷ lệ kèo bóng đá cũng sẽ được gửi nếu khách hàng yêu cầu không được hỗ trợ Tùy chọn giao thức (tức là bắt đầu bằng_PQ_.) trong gói khởi động. tỷ lệ kèo bóng đá này sẽ là theo sau là một errorresponse hoặc một tỷ lệ kèo bóng đá cho biết sự thành công hoặc thất bại của xác thực.
Nếu frontend tỷ lệ kèo bóng đá hỗ trợ phương thức xác thực được yêu cầu bởi máy chủ, sau đó nó sẽ đóng ngay lập tức sự liên quan.
Sau khi nhận được xác thực, frontend phải đợi Để biết thêm tỷ lệ kèo bóng đá từ máy chủ. Trong giai đoạn này, phụ trợ quá trình đang được bắt đầu, và Frontend chỉ là một người ngoài cuộc. Vẫn có thể cố gắng khởi động (ErrorResponse) hoặc máy chủ từ chối hỗ trợ cho yêu cầu phiên bản giao thức nhỏ (đàm phán), nhưng trong Trường hợp bình thường, phần phụ trợ sẽ gửi một số tỷ lệ kèo bóng đá tham số, BackendKeyData, và cuối cùng đã sẵn sàng.
16394_16623
Các tỷ lệ kèo bóng đá 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 nó muốn có thể phát hành các yêu cầu hủy sau này. Các Frontend không nên trả lời tỷ lệ kèo bóng đá này, nhưng nên tiếp tục lắng nghe một tỷ lệ kèo bóng đá ReadyForQuery.
tỷ lệ kèo bóng đá báo này tỷ lệ kèo bóng đá báo cho Frontend về hiện tại (ban đầu) Cài đặt tham số phụ trợ, chẳng hạn nhưclient_encodinghoặcDatestyle. Các Frontend có thể bỏ qua tỷ lệ kèo bóng đá báo này hoặc ghi lại các cài đặt cho sử dụng trong tương lai; nhìn thấyPhần 48.2.6Để biết thêm chi tiết. Frontend không nên trả lời tỷ lệ kèo bóng đá này, nhưng nên tiếp tục lắng nghe một chiếc ReadyForQuery tỷ lệ kèo bóng đá.
Khởi nghiệp được hoàn thành. Frontend hiện có thể phát hành các tỷ lệ kèo bóng đánh.
Khởi nghiệp không thành công. Kết nối được đóng sau khi gửi cái này tỷ lệ kèo bóng đá.
Một tỷ lệ kèo bóng đá điệp cảnh báo đã được ban hành. Frontend sẽ hiển thị tỷ lệ kèo bóng đá điệp nhưng tiếp tục lắng nghe ReadyForQuery hoặc ErrorResponse.
17964_18273
Một chu kỳ truy vấn đơn giản được bắt đầu bởi frontend gửi một Truy vấn tỷ lệ kèo bóng đá cho 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 tỷ lệ kèo bóng đá 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 cách an toàn yêu cầu. (Nó thực sự không cần thiết để phía trước để chờ đợi ReadyForQuery trước khi ban hành một lệnh khác, nhưng frontend phải sau đó chịu trách nhiệm tìm ra những gì xảy ra nếu Lệnh trước đó không thành công và đã được cấp các lệnh sau thành công.)
tỷ lệ kèo bóng đá báo phản hồi có thể từ phần phụ trợ là:
tỷ lệ kèo bóng đá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 48.2.5.
Phần phụ trợ đã sẵn sàng sao chép dữ liệu từ bảng sang mặt trước; nhìn thấyPhần 48.2.5.
19591_19655Chọn, Fetch,, vv truy vấn. Nội dung của thông 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 tỷ lệ kèo bóng đá Datarow cho mỗi Hàng được trả lại cho Frontend.
tỷ lệ kèo bóng đá trong những hàng hàng được trả về bởi AChọn, Fetch, v.v. Truy vấn.
tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá 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. (CommandComplete đánh dấu sự kết thúc của quá trình xử lý một lệnh sql, không phải toàn bộ chuỗi.) ReadyForQuery sẽ luôn luôn được gửi, cho dù việc xử lý chấm dứt thành công hay với lỗi.
Một tỷ lệ kèo bóng đá điệp cảnh báo đã được đưa ra liên quan đến truy vấn. Các tỷ lệ kèo bóng đá báo ngoài các câu trả lời khác, tức là, phụ trợ sẽ Tiếp tục xử lý lệnh.
Phản hồi cho AChọnTruy vấn (hoặc Các truy vấn khác trả về các bộ hàng, chẳng hạn nhưGiải thíchhoặcshow) Thông thường bao gồm Rowdescrip, không có hoặc nhiều tỷ lệ kèo bóng đá Datarow, và sau đó CommandComplete.Copyđến hoặc từ Frontend gọi giao thức đặc biệt như được mô tả trongPhần 48.2.5. Tất cả khác Các loại truy vấn thường chỉ tạo ra một tỷ lệ kèo bóng đá báo CommandComplete.
21286_21590
Nếu tỷ lệ kèo bóng đá truy vấn hoàn toàn trống (không có nội dung nào khác ngoài khoảng trắng) Chuỗi được nhận, phản hồi là trốngQueryResponse theo sau là ReadyForQuery.
Trong trường hợp có lỗi, ErrorResponse được phát hành theo sau ReadyForQuery. Tất cả việc xử lý thêm chuỗi truy vấn là 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 tỷ lệ kèo bóng đá được tạo bởi một truy vấn riêng lẻ.
Ở chế độ truy vấn đơn giản, định dạng của các giá trị được truy xuất luôn luôn văn bản, ngoại trừ khi tỷ lệ kèo bóng đánh đã cho làFetchTừ con trỏ được khai tỷ lệ kèo bóng đá 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 ROWDESCRIPT tỷ lệ kèo bóng đá báo cho biết định dạng nào đang được sử dụng.
Frontend phải được chuẩn bị để chấp nhận ErrorResponse và tỷ lệ kèo bóng đá noticeResponse bất cứ khi nào nó đang mong đợi bất kỳ loại tỷ lệ kèo bóng đá. Xem thêmPhần 48.2.6Liên quan các tỷ lệ kèo bóng đá báo mà phụ trợ có thể tạo do các sự kiện bên ngoài.
22691_22903
Giao thức truy vấn mở rộng bị phá vỡ Giao thức truy vấn đơn giản thành nhiều bước. Kết quả của Các 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, các tính năng bổ sung có sẵn, chẳng hạn như Khả năng cung cấp các giá trị dữ liệu dưới dạng các 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.
Trong giao thức mở rộng, Frontend trước tiên gửi một phân tích cú pháp thông báo, chứa chuỗi truy vấn văn bản, tùy chọn một số thông tỷ lệ kèo bóng đá về các loại dữ liệu của các trình giữ chỗ tham số và Tên của một đối tượng đã chuẩn bị đã chuẩn bị (một chuỗi trống chọn câu lệnh đã chuẩn bị không tên). Phản hồi là Parsecomplete hoặc errorresponse. Các loại dữ liệu tham số có thể là được chỉ định bởi OID; Nếu không được đưa ra, trình phân tích cú pháp cố gắng suy luận Các loại dữ liệu theo cách tương tự như nó sẽ làm cho không cần thiết theo nghĩa đen Hằng số chuỗi.
tỷ lệ kèo bóng đá ý:tỷ lệ kèo bóng đá kiểu dữ liệu tham số có thể được xác định bởi Đặt nó thành 0 hoặc bằng cách tạo mảng của loại tham số oids ngắn hơn số ký hiệu tham số ($n) được sử dụng trong chuỗi truy vấn. tỷ lệ kèo bóng đá 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ự ra tham số. tỷ lệ kèo bóng đá thường không có bối cảnh trong đó mộtvoidtham số có thể được sử dụng, nhưng nếu tỷ lệ kèo bóng đá Biểu tượng tham số xuất hiện trong danh sách tham số của hàm, nó là Bỏ qua tỷ lệ kèo bóng đá cách hiệu quả. Ví dụ: cuộc gọi chức năng nhưfoo ($ 1, $ 2, $ 3, $ 4)có thể khớp với tỷ lệ kèo bóng đá hàm với hai in và hai đối số ra, nếu$ 3và$ 4được chỉ định là có loạivoid.
tỷ lệ kèo bóng đá ý:Chuỗi truy vấn có trong tỷ lệ kèo bóng đá báo phân tích cú pháp không thể bao gồm nhiều hơn một câu lệnh SQL; khác là lỗi cú pháp là báo cáo. Hạn chế này không tồn tại trong trình độ đơn giản giao thức, 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ị có chứa nhiều Các lệnh sẽ làm phức tạp giao thức quá mức.
25443_26029Chuẩ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ị cho Thực thi bằng một thông báo ràng buộc. Thông điệp ràng buộc cho đến tên của Câu lệnh được chuẩn bị nguồn (chuỗi trống biểu thị tuyên bố đã chuẩn bị), tên của cổng thông tỷ lệ kèo bóng đá đích (trống Chuỗi biểu thị cổng thông tỷ lệ kèo bóng đá không tên) và các giá trị sẽ sử dụng cho bất kỳ Người giữ chỗ tham số có mặt trong tuyên bố đã chuẩn bị. Các Bộ tham số được cung cấp phải phù hợp với các tập hợp cần thiết bởi đã chuẩn bị tuyên bố. (Nếu bạn đã tuyên bố bất kỳvoidtham số trong tỷ lệ kèo bóng đá báo phân tích. tỷ lệ kèo bóng đá 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 trở lại bởi truy vấn; Định dạng có thể được chỉ định tổng thể, hoặc mỗi cột. Phản hồi là BindComplete hoặc ErrorResponse.
tỷ lệ kèo bóng đá ý:Sự lựa chọn giữa văn bản và đầu ra nhị phân là được xác định bởi các mã định dạng được đưa ra trong ràng buộc, bất kể SQL chỉ huy liên quan. Thenhị phânthuộc tính trong Tuyên bố con trỏ tỷ lệ kèo bóng đá liên quan khi sử dụng truy vấn mở rộng giao thức.
27210_27708
Nếu được tạo thành công, một đối tượng cổng thông tin 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 tin không tên bị phá hủy vào cuối giao dịch, hoặc như ngay khi câu lệnh liên kết tiếp theo chỉ định cổng thông tin không tên là điểm đến được ban hành. (Lưu ý rằng một thông báo truy vấn đơn giản cũng Phá hủy cổng thông tin không tên.) Cổng có tên phải rõ ràng đã đóng trước khi chúng có thể được xác định lại bởi một tỷ lệ kèo bóng đá ràng buộc khác, nhưng Điều này là không cần thiết cho cổng thông tin không tên. 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.
Một khi một cổng thông tin tồn tại, nó có thể được thực thi bằng cách sử dụng một thực thi tỷ lệ kèo bóng đá. Thông báo thực thi chỉ định tên cổng thông tin (trống Chuỗi biểu thị cổng thông tin không tên) và số lượng hàng kết quả tối đa (không có nghĩa là"Tìm nạp tất cả các hàng"). Các 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 đó là bộ hàng trở lại; 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ể để thực hiện giống như những gì được mô tả ở trên cho các truy vấn được phát hành tỷ lệ kèo bóng đá qua giao thức truy vấn đơn giản, ngoại trừ việc thực thi không gây ra ReadyForQuery hoặc Rowdescrip sẽ được ban hành.
Nếu thực thi chấm dứt trước khi hoàn thành việc thực hiện A Cổng thông tin (do đạt được số lượng hàng kết quả khác), nó sẽ gửi một tỷ lệ kèo bóng đá portalsuspend; sự xuất hiện của thông điệp này cho biết phía trước mà một thực thi khác nên được ban hành đối với cùng một Cổng thông tin để hoàn thành hoạt động. Thông điệp CommandComplete Cho biết việc hoàn thành lệnh SQL nguồn không được gửi cho đến khi Việc thực hiện cổng thông tin được hoàn thành. Do đó, một giai đoạn thực thi là luôn bị chấm dứt bởi sự xuất hiện của chính xác một trong số này tỷ lệ kèo bóng đá: CommandComplete, trốngQueryResponse (nếu cổng thông tin là được tạo từ một chuỗi truy vấn trống), errorResponse hoặc Portalsuspends.
Khi hoàn thành từng loạt tỷ lệ kèo bóng đá trình độ mở rộng, Frontend sẽ phát hành một thông báo đồng bộ. Thông báo không tham số này khiến phụ trợ đóng giao dịch hiện tại nếu không Bên trong ABắt đầu/cam kếtkhối giao dịch ("Đóng"Có nghĩa là cam kết nếu không có lỗi hoặc quay lại Nếu lỗi). Sau đó, một phản hồi ReadyForQuery được ban hành. Mục đích của Đồng bộ hóa là để cung cấp một điểm tổng hợp để phục hồi lỗi. Khi phát hiện lỗi trong khi xử lý bất kỳ vấn đề mở rộng nào tỷ lệ kèo bóng đá, phần phụ trợ phát hành ErrorResponse, sau đó đọc và loại bỏ tỷ lệ kèo bóng đá cho đến khi đạt được đồng bộ hóa, sau đó phát hành ReadyForQuery và trở lại xử lý tỷ lệ kèo bóng đá thông thường. (Nhưng lưu ý rằng không bỏ qua xảy ra nếu phát hiện lỗitrong khiXử lý đồng bộ hóa - Điều này đảm bảo rằng có tỷ lệ kèo bóng đá và chỉ tỷ lệ kèo bóng đá sẵn sàng được gửi cho mỗi Đồng bộ.)
tỷ lệ kèo bóng đá ý:SYNC tỷ lệ kèo bóng đá gây ra khối giao dịch được mở bằngBắt đầu30738_30867
Ngoài các hoạt động cơ bản, cần thiết này, còn có tỷ lệ kèo bóng đá số hoạt động tùy chọn có thể được sử dụng với trình độ mở rộng giao thức.
31041_31401
31407_32109
Tip:Trong hầu hết các kịch bản, Frontend nên phát hành tỷ lệ kèo bóng đá 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 đã chuẩn bị hiện có hoặc Cổng thông tỷ lệ kèo bóng đá 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 chống lại một tuyên bố hoặc tên cổng thông tỷ lệ kèo bóng đá không tồn tại. Phản hồi là Thông thường đóng hoàn chỉnh, nhưng có thể là errorresponse nếu một số Khó khăn gặp phải trong khi phát hành tài nguyên. Lưu ý rằng Đóng một tuyên bố đã chuẩn bị ngầm đó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 ra, nhưng buộc phụ trợ để cung cấp bất kỳ dữ liệu đang chờ xử lý bộ đệm đầu ra của nó. Một tuôn ra phải được gửi sau khi có bất kỳ trình độ mở rộng nào Lệnh ngoại trừ đồng bộ, 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. Không có Flush, tỷ lệ kèo bóng đá được trả về bởi phần phụ trợ sẽ được kết hợp vào tối thiểu Số lượng gói có thể để giảm thiểu chi phí mạng.
tỷ lệ kèo bóng đá ý:Thông báo truy vấn đơn giản xấp xỉ tương đương với loạt phân tích, ràng buộc, mô tả cổng thông tỷ lệ kèo bóng đá, thực thi, Đóng, đồng bộ, sử dụng câu lệnh và cổng thông tỷ lệ kèo bóng đá đã được đặt tên Đối tượng 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/DESTRID/EXTRICE cho từng phần trong sự kế thừa. Một điểm khác biệt khác là nó sẽ không trở lại Parsecomplete, BindComplete, CloseComplete hoặc NODATA.
chức năng gọi phụ cho phép máy khách yêu cầu A Cuộc 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. Khách hàng phải có quyền thực thi cho chức năng.
tỷ lệ kèo bóng đá ý:Chức năng gọi phụ là tỷ lệ kèo bóng đá tính năng di sản Điều đó có lẽ tốt nhất là tránh trong mã mới. Kết quả tương tự có thể hoàn thành bằng cách thiết lập tỷ lệ kèo bóng đá câu lệnh đã chuẩn bịChọn chức năng ($ 1, ...). Chức năng Chu kỳ cuộc gọi sau đó có thể được thay thế bằng BIND/EXECUTE.
Chu kỳ cuộc gọi chức năng được bắt đầu bởi Frontend gửi một tỷ lệ kèo bóng đá báo chức năng vào phần phụ trợ. Phần phụ trợ sau đó gửi một hoặc Thêm tỷ lệ kèo bóng đá báo phản hồi tùy thuộc vào kết quả của chức năng Gọi, và cuối cùng là một tỷ lệ kèo bóng đá báo phản hồi ReadyForQuery. ReadyForQuery tỷ lệ kèo bóng đá báo cho frontend rằng nó có thể gửi một truy vấn mới một cách an toàn hoặc gọi chức năng.
tỷ lệ kèo bóng đá báo phản hồi có thể từ phần phụ trợ là:
Đã 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 tỷ lệ kèo bóng đá điệ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 duy nhất, không phải là loại hàng hoặc bộ kết quả.)
Xử lý cuộc gọi chức năng đã hoàn tất. ReadyForQuery Will luôn được gửi, cho dù việc xử lý chấm dứt thành công hay với tỷ lệ kèo bóng đá lỗi.
Một tỷ lệ kèo bóng đá báo cảnh báo đã được ban hành liên quan đến chức năng gọi. tỷ lệ kèo bóng đá báo ngoài các câu trả lời khác, tức là, phụ trợ sẽ tiếp tục xử lý lệnh.
TheCopyLệnh cho phép số lượng lớn tốc độ cao Chuyển dữ liệu đến hoặc từ máy chủ. Sao chép và sao chép mỗi hoạt động chuyển kết nối thành tỷ lệ kèo bóng đá giao thức phụ riêng biệt, kéo dài cho đến khi hoạt động hoàn thành.
chế độ sao chép (truyền dữ liệu vào máy chủ) được bắt đầu khi phụ trợ thực thi tỷ lệ kèo bóng đáSao chép từ StdinSQL tuyên bố. Phần phụ trợ gửi tỷ lệ kèo bóng đá CopyInresponse đến phía trước. Frontend sau đó sẽ gửi bằng không hoặc nhiều copydata tỷ lệ kèo bóng đá, hình thành một luồng dữ liệu đầu vào. (Ranh giới thông điệp không bắt buộc phải làm gì với ranh giới hàng, mặc dù đó thường là một lựa chọn hợp lý.) Mặt trận có thể chấm dứt chế độ sao chép bằng cách gửi tỷ lệ kèo bóng đá copyDone (cho phép chấm dứt thành công) hoặc tỷ lệ kèo bóng đá copyfail (sẽ gây raCopyTuyên bố SQL không thành công với tỷ lệ kèo bóng đá lỗi). Phần phụ trợ sau đó trở lại chế độ xử lý lệnh nó đã ở trướcCopyBắt đầu, trong đó sẽ là giao thức truy vấn đơn giản hoặc mở rộng. Nó sẽ gửi tiếp theo CommandComplete (nếu thành công) hoặc errorResponse (nếu tỷ lệ kèo bóng đá).
Trong trường hợp lỗi được phát hiện theo phụ trợ trong chế độ sao chép (bao gồm cả việc nhận tỷ lệ kèo bóng đá copyfail), phần phụ trợ sẽ phát hành một thông báo ErrorResponse. Nếusao chép37139_37346CopyLệnh đã được ban hành một cách đơn giản tỷ lệ kèo bóng đá truy vấn, phần còn lại của tỷ lệ kèo bóng đá đó bị loại bỏ và ReadyForQuery được ban hành. Trong cả hai trường hợp, bất kỳ copydata tiếp theo, Copydone hoặc tỷ lệ kèo bóng đá copyfail do frontend ban hành sẽ đơn giản bị bỏ.
Phần phụ trợ sẽ bỏ qua các tỷ lệ kèo bóng đá được xóa và đồng bộ hóa trong thời gian Chế độ sao chép. Nhận được bất kỳ loại tỷ lệ kèo bóng đá không sao chép nào khác cấu thành một lỗi sẽ hủy bỏ trạng thái sao chép như mô tả bên trên. (Ngoại lệ cho Flush và Sync là để thuận tiện cho Thư viện máy khách luôn gửi hoặc đồng bộ hóa sau khi thực hiện thông báo, mà không kiểm tra xem lệnh sẽ được thực thi có phải làSao chép từ Stdin.)
Chế độ sao chép (truyền dữ liệu từ máy chủ) được bắt đầu khi phụ trợ thực thi tỷ lệ kèo bóng đáSao chép vào stdoutSQL tuyên bố. Phần phụ trợ gửi tỷ lệ kèo bóng đá CopyouTresponse đến Frontend, theo sau là tỷ lệ kèo bóng đá CopyData bằng không hoặc nhiều mỗi hàng), theo sau là copydone. Phụ trợ sau đó trở lại Chế độ xử lý lệnh nó đã ở trướcCopyBắt đầu và gửi CommandComplete. Các 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ỏ tỷ lệ kèo bóng đá CopyData và CopyDone không mong muốn.
Trong trường hợp lỗi được phát hiện theo hướng phụ trách trong chế độ sao chép, Phần phụ trợ sẽ phát hành tỷ lệ kèo bóng đá errorResponse và trở lại xử lý bình thường. Frontend nên xử lý nhận ErrorResponse khi chấm dứt chế độ sao chép.
Có thể tỷ lệ kèo bóng đá noticeResponse và parameterstatus được xen kẽ giữa các tỷ lệ kèo bóng đá copyData; Mặt trận phải xử lý những trường hợp này và nên được chuẩn bị cho thông điệp không đồng bộ khác Các loại cũng vậy (xemPhần 48.2.6). Nếu không thì, Bất kỳ loại tỷ lệ kèo bóng đá nào khác ngoài copydata hoặc copydone có thể được coi là kết thúc chế độ sao chép.
Có tỷ lệ kèo bóng đá chế độ liên quan đến bản sao khác được gọi là Copy-Both, mà Cho phép truyền dữ liệu hàng loạt tốc độ cao sangvàTừ máy chủ. Sao chép chế độ-cả được bắt đầu khi phần phụ trợ trong chế độ Walsender thực thistart_Replication39563_40560Phần 48.3Để biết thêm thông tỷ lệ kèo bóng đá trên protrotocol được truyền qua chế độ sao chép-cả.
40692_40940CopyHoạt động sẽ sử dụng cùng một định dạng, Nhưng thiết kế tỷ lệ kèo bóng đá không giả định điều này.)
Có một số trường hợp phụ trợ sẽ gửi tỷ lệ kèo bóng đá không được nhắc cụ thể bởi lệnh của frontend suối. Frontends phải được chuẩn bị để đối phó với những tỷ lệ kèo bóng đá này tại 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, nên Kiểm tra những trường hợp này trước khi bắt đầu đọc một truy vấn phản ứng.
41519_41659"Fast"Tắt cơ sở dữ liệu, The Backend sẽ gửi một noticeResponse cho biết thực tế này trước đóng kết nối. Theo đó, các frontends phải luôn luôn chuẩn bị để chấp nhận và hiển thị các tỷ lệ kèo bóng đá noticeResponse, ngay cả khi kết nối không nhàn rỗi.
tỷ lệ kèo bóng đá Parameterstatus sẽ được tạo bất cứ khi nào hoạt động thay đổi giá trị cho bất kỳ tham số nào mà phụ trợ tin tưởng Frontend nên biết về. Thông thường nhất là điều này xảy ra để đáp ứng đến asettỷ lệ kèo bóng đánh SQL được thực hiện bởi phía trước, và trường hợp này có hiệu quả đồng bộ - nhưng nó cũng là có thể thay đổi trạng thái tham số xảy ra vì Quản trị viên đã thay đổi tệp cấu hình và sau đó đã gửiSIGHUPTín hiệu cho máy chủ. Cũng, Nếu asetlệnh được cuộn trở lại, một tỷ lệ kèo bóng đá 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ó tỷ lệ kèo bóng đá bộ tham số có dây cứng mà Parameterstatus sẽ được tạo: 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, timezone, Vàinteger_datetimestỷ lệ kèo bóng đá được báo cáo bởi phát hành trước 8.0;Standard_Conforming_Stringstỷ lệ kèo bóng đá được báo cáo bởi phát hành trước 8.1;IntervalStyletỷ lệ kèo bóng đá được báo cáo bởi các bản phát hành trước 8.4;application_nametỷ lệ kèo bóng đá đượ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ả không 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 đó, tỷ lệ kèo bóng đá frontend chỉ nên bỏ qua Parameterstatus cho các tham số mà nó không hiểu hoặc quan tâm Về.
Nếu Frontend phát hành Anghelệnh, Sau đó, phần phụ trợ sẽ gửi một thông báo tỷ lệ kèo bóng đá (không Hãy nhầm lẫn với NoticeResponse!) Bất cứ khi nàotỷ lệ kèo bóng đá báoLệnh được thực thi cho cùng tỷ lệ kèo bóng đá kênh tên.
tỷ lệ kèo bóng đá ý:Hiện tại, tỷ lệ kèo bóng đá báo chỉ có thể được gửi 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 ReadyForQuery. Không khôn ngoan khi thiết kế logic frontend giả định Điều đó, tuy nhiên. Thực hành tốt là có thể chấp nhận tỷ lệ kèo bóng đá báoResponse tại bất kỳ điểm nào trong giao thức.
44843_45296
Để đưa ra yêu cầu hủy bỏ, Frontend mở kết nối mới đến máy chủ và gửi tỷ lệ kèo bóng đá hủyRequest, thay vì Thông báo startupmessage thường sẽ được gửi qua một sự liên quan. Máy chủ sẽ xử lý yêu cầu này và sau đó đóng sự liên quan. 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 Hủy thông báo yêu cầu.
tỷ lệ kèo bóng đá báo hủyRequest sẽ bị bỏ qua trừ khi nó chứa Cùng một dữ liệu khóa (Key PID và Bí mật) được chuyển đến Frontend trong Kết nối khởi động. Nếu yêu cầu khớp với khóa PID và bí mật Đối với một phụ trợ hiện đang thực hiện, việc xử lý hiện tại Truy vấn bị hủy bỏ. (Trong việc thực hiện hiện tại, điều này được thực hiện bởi Gửi tín hiệu đặc biệt đến quy trình phụ trợ đang xử lý truy vấn.)
46073_46358
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ả, Frontend không có cách trực tiếp nào để biết liệu Hủy có yêu cầu đã thành cô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 rằng truy vấn hiện tại sẽ sớm kết thúc và cải thiện tỷ lệ cược nó sẽ thất bại với một tỷ lệ kèo bóng đá báo lỗi thay vì thành công.
46760_47311
47426_47634
Trong những trường hợp hiếm hoi (chẳng hạn như cơ sở dữ liệu được quản lý tắt máy) phụ trợ có thể ngắt kết nối mà không có 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 lỗi hoặc tỷ lệ kèo bóng đá báo tỷ lệ kèo bóng đá 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ư bãi rác lõi ở đầu này hay đầu kia, mất Liên kết truyền thông, mất đồng bộ hóa giới hạn tỷ lệ kèo bóng đá, v.v. Nếu frontend hoặc phụ trợ sẽ thấy một sự đóng cửa bất ngờ của Kết nối, nó nên làm sạch và chấm dứt. Mặt trận có Tùy chọn khởi chạy một phụ trợ mới bằng cách khởi động lại máy chủ nếu nó không muốn tự chấm dứt. Đóng kết nối cũng là nên nhận nếu một loại tỷ lệ kèo bóng đá không thể nhận ra được, vì điều này có thể cho biết mất đồng bộ hóa giới hạn tỷ lệ kèo bóng đá.
Để chấm dứt bình thường hoặc bất thường, bất kỳ giao dịch mở nào được lăn lại, không cam kết. Tuy nhiên, người ta nên lưu ý rằng nếu tỷ lệ kèo bóng đá Frontend ngắt kết nối trong khi không phảiChọ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 ở bên ngoài bất kỳ khối giao dịch nào (Bắt đầu...cam kếttrình tự) sau đó kết quả của nó có thể là cam kết trước khi ngắt kết nối được nhận ra.
nếuPOSTGRESQLđược xây dựng vớiSSLHỗ trợ, Frontend/phụ trợ Truyền tỷ lệ kèo bóng đá 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 môi trường nơi những kẻ tấn công có thể bắt được phiên giao thông. Để biết thêm thông tỷ lệ kèo bóng đá về mã hóaPOSTGRESQLPhiên vớiSSL, xemPhần 17.9.
Để bắt đầuSSL-encrypted kết nối, frontend ban đầu gửi tỷ lệ kèo bóng đá SSLRequest thay vì một startupmessage. Máy chủ sau đó phản hồi với một byte đơn chứaShoặcn, chỉ ra rằng nó sẵn sàng hoặc tỷ lệ kèo bóng đá muốn trình diễnSSL, tương ứng. Các Frontend có thể đóng kết nối tại thời điểm này nếu nó là tỷ lệ kèo bóng đá hài lòng với phản ứng. Để tiếp tục sauS, thực hiện50229_50234bắt tay khởi động (không được mô tả ở đây, tỷ lệ kèo bóng đá phần củaSSLĐặc điểm kỹ thuật) với máy chủ. Nếu đây là Thành công, tiếp tục với việc gửi công ty khởi nghiệp tỷ lệ kèo bóng đá thường. Trong này trường hợp startupMessage và tất cả dữ liệu tiếp theo sẽ làSSL-encrypted. Để tiếp tục saun, Gửi tỷ lệ kèo bóng đá thường tiến hành mà không cần mã hóa.
Frontend cũng nên được chuẩn bị để xử lý tỷ lệ kèo bóng đá ErrorMessage Phản hồi 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. (Máy chủ như vậy bây giờ rất Cổ đại và có khả năng tỷ lệ kèo bóng đá còn tồn tại trong tự nhiên nữa.) Trong trường hợp này Kết nối phải được đóng, nhưng mặt tiền có thể chọn Mở kết nối mới và tiến hành mà tỷ lệ kèo bóng đá yêu cầuSSL.
SSLRequest ban đầu cũng có thể được sử dụng trong kết nối đó được mở để gửi tỷ lệ kèo bóng đá hủyRequest.
51304_51379SSLMã hóa, The Quản trị viên có thể định cấu hình máy chủ để từ chối các phiên như tỷ lệ kèo bóng đá sản phẩm phụ của kiểm tra xác thực.
prev | PostgreSQL: | NEXT |
Tổng quan | UP | Sao chép phát trực tuyến Giao thức |