이 섹션에서는 메시지 흐름을 설명합니다. 4개가 있다 연결 상태에 따라 다양한 유형의 흐름: 시작, 쿼리, 함수 호출 및 종료. 또한 있다 알림 응답 및 명령에 대한 특별 조항 취소는 시작 후 언제든지 발생할 수 있습니다. 단계.
시작은 인증 단계와 백엔드로 구분됩니다. 시작 단계.
처음에는 프런트엔드가 StartupPacket을 보냅니다. 우체국장 이 정보와 pg_hba.conf(5) 파일의 내용을 사용하여 프런트엔드에서 사용해야 하는 인증 방법을 결정합니다. 는 그런 다음 포스트마스터는 다음 메시지 중 하나로 응답합니다.
그 후 포스트마스터는 즉시 연결을 종료합니다.
그런 다음 우체국장은 백엔드에 인계합니다. 는 우체국장은 통신에 더 이상 참여하지 않습니다.
프런트엔드는 Kerberos V4에 참여해야 합니다. 포스트마스터와의 인증 대화 상자(여기서는 설명되지 않음) 이것이 성공하면 포스트마스터는 다음과 같이 응답합니다. 인증Ok, 그렇지 않으면 다음과 같이 응답합니다. 오류응답.
프런트엔드는 Kerberos V5에 참여해야 합니다. 포스트마스터와의 인증 대화 상자(여기서는 설명되지 않음) 이것이 성공하면 포스트마스터는 다음과 같이 응답합니다. 인증Ok, 그렇지 않으면 다음과 같이 응답합니다. 오류응답.
프런트엔드는 UnencryptedPasswordPacket을 보내야 합니다. 만약에 이것이 올바른 비밀번호라면 포스트마스터는 다음과 같이 응답합니다. 인증Ok, 그렇지 않으면 다음과 같이 응답합니다. 오류응답.
프런트엔드는 EncryptedPasswordPacket을 보내야 합니다. 만약에 이것이 올바른 비밀번호라면 포스트마스터는 다음과 같이 응답합니다. 인증Ok, 그렇지 않으면 다음과 같이 응답합니다. 오류응답.
프런트엔드가 인증 방법을 지원하지 않는 경우 우체국장이 요청하면 즉시 폐쇄되어야 합니다. 연결.
AuthenticationOk를 보낸 후, 포스트마스터는 다음을 시도합니다. 백엔드 프로세스를 시작합니다. 이것이 실패할 수도 있고 백엔드가 시작하는 동안 오류가 발생할 수 있으므로 프런트엔드는 기다려야 합니다. 백엔드가 성공적인 시작을 승인하도록 합니다. 프런트엔드 이 시점에서는 메시지를 보내서는 안 됩니다. 다음에서 보낼 수 있는 메시지 이 단계의 백엔드는 다음과 같습니다.
이 메시지는 백엔드 시작이 성공한 후 발행됩니다. 그것 프런트엔드가 저장해야 하는 비밀 키 데이터를 제공합니다. 나중에 취소 요청을 발행할 수 있기를 원합니다. 프런트엔드 이 메시지에 응답해서는 안 되지만 계속 진행해야 합니다. ReadyForQuery 메시지를 수신 중입니다.
백엔드 시작이 성공했습니다. 이제 프런트엔드에서 문제가 발생할 수 있습니다. 쿼리 또는 함수 호출 메시지.
백엔드 시작에 실패했습니다. 다음 이후에 연결이 종료됩니다. 이 메시지를 보냅니다.
경고 메시지가 발행되었습니다. 프런트엔드는 다음과 같이 해야 합니다. 메시지를 표시하지만 ReadyForQuery를 계속 수신하거나 오류응답.
ReadyForQuery 메시지는 백엔드가 보내는 것과 동일합니다 각 쿼리 주기 후에 발행됩니다. 코딩 요구 사항에 따라 프론트엔드를 시작하는 것으로 ReadyForQuery를 고려하는 것이 합리적입니다. 쿼리 주기(그런 다음 BackendKeyData는 성공을 나타냄) 시작 단계의 결론) 또는 ReadyForQuery를 다음과 같이 고려하십시오. 시작 단계와 각 후속 쿼리 주기를 종료합니다.
쿼리 주기는 쿼리를 보내는 프런트엔드에 의해 시작됩니다. 백엔드에 메시지를 보냅니다. 그런 다음 백엔드는 하나 이상의 응답을 보냅니다. 쿼리 명령 문자열의 내용에 따른 메시지 마지막으로 ReadyForQuery 응답 메시지입니다. ReadyForQuery는 새로운 쿼리나 함수 호출을 안전하게 보낼 수 있다는 프런트엔드입니다.
백엔드에서 가능한 응답 메시지는 다음과 같습니다:
SQL 명령이 정상적으로 완료되었습니다.
백엔드가 프런트엔드에서 데이터를 복사할 준비가 되었습니다. 관계. 그러면 프런트엔드에서 CopyDataRows 메시지를 보내야 합니다. 그러면 백토토 사이트 추천 CompletedResponse 메시지로 응답합니다. 'COPY' 태그가 있습니다.
백엔드가 관계에서 데이터를 복사할 준비가 되었습니다. 프론트엔드. 그런 다음 CopyDataRows 메시지를 보낸 다음 "COPY" 태그가 포함된 CompletedResponse 메시지입니다.
쿼리는 삽입(l), 삭제(l), 업데이트(l), fetch(l) 또는 select(l) 명령. 거래가 이루어진 경우 중단된 후 백엔드는 CompletedResponse 메시지를 다음과 같이 보냅니다. "*ABORT STATE*" 태그. 그렇지 않으면 다음 응답은 다음과 같습니다. 보냈습니다.
insert(l) 명령의 경우 백엔드는 다음을 보냅니다. 'INSERT 태그가 포함된 CompletedResponse 메시지oid 행" 어디서행수는 행이 삽입되었으며, 및oid이것은 삽입된 행의 개체 ID인 경우행은 1이고, 그렇지 않으면oid0입니다.
삭제(l) 명령의 경우 백엔드는 다음을 보냅니다. "DELETE 태그가 포함된 CompletedResponse 메시지행" 여기서행삭제된 행 수입니다.
업데이트(l) 명령의 경우 백엔드는 다음을 보냅니다. 'UPDATE 태그가 포함된 CompletedResponse 메시지행" 어디서행삭제된 행 수입니다.
fetch(l) 또는 select(l) 명령의 경우 백엔드는 다음을 보냅니다. 행 설명 메시지입니다. 그런 다음 AsciiRow 또는 BinaryRow 메시지(바이너리 커서가 실행되었는지 여부에 따라 다름) 지정) 프런트엔드로 반환되는 각 행에 대해 마지막으로 백엔드는 CompletedResponse 메시지를 다음과 같이 보냅니다. "SELECT" 태그입니다.
빈 쿼리 문자열이 인식되었습니다. (특별히 필요한 이 사건은 역사적 사건임을 구별하세요.)
오류가 발생했습니다.
쿼리 문자열 처리가 완료되었습니다. 별도의 쿼리 문자열이 여러 SQL 명령을 포함합니다. (CompletedResponse는 끝을 표시합니다. 전체 문자열이 아닌 하나의 SQL 명령을 처리하는 것입니다.) ReadyForQuery는 처리 여부에 관계없이 항상 전송됩니다. 성공적으로 종료되었거나 오류가 발생했습니다.
쿼리와 관련하여 경고 메시지가 발행되었습니다. 통지는 다른 응답에 추가됩니다. 백엔드 계속해서 명령을 처리합니다.
프런트토토 사이트 추천 ErrorResponse를 수용할 준비가 되어 있어야 하며 다른 유형의 메시지가 나타날 때마다 통지응답 메시지가 나타납니다. 메시지.
사실, 다음과 같은 경우에도 통지응답이 도착할 수 있습니다. 프런트엔드는 어떤 종류의 메시지도 기대하지 않습니다. 백엔드는 명목상 유휴 상태입니다. (특히 백엔드는 포스트마스터가 종료하라는 명령을 내렸습니다. 그 경우에는 보내드립니다 연결을 닫기 전에 공지사항 응답을 보내십시오.) 권장됩니다. 프런트엔드는 직전에 그러한 비동기 알림을 확인합니다. 새로운 명령을 발행합니다.
또한 프런트엔드가 Listen(l) 명령을 실행하는 경우 다음을 수행해야 합니다. 언제든지NotificationResponse 메시지를 받아들일 준비를 하십시오. 아래를 참조하세요.
함수 호출 주기는 프런트엔드가 다음을 전송하여 시작됩니다. 백엔드에 대한 FunctionCall 메시지입니다. 그런 다음 백엔드는 다음 중 하나를 보냅니다. 함수 결과에 따라 더 많은 응답 메시지 호출하고 마지막으로 ReadyForQuery 응답 메시지를 보냅니다. 쿼리 준비 새 쿼리를 안전하게 보낼 수 있음을 프런트엔드에 알립니다. 함수 호출.
백엔드에서 가능한 응답 메시지는 다음과 같습니다:
오류가 발생했습니다.
함수 호출이 실행되었으며 결과가 반환되었습니다.
함수 호출이 실행되었지만 결과가 반환되지 않았습니다.
함수 호출 처리가 완료되었습니다. 쿼리 준비 처리가 성공적으로 종료되었는지 여부에 관계없이 항상 전송됩니다. 또는 오류가 있습니다.
다음과 관련하여 경고 메시지가 발행되었습니다. 함수 호출. 통지는 다른 응답에 추가됩니다. 백엔드는 명령을 계속 처리합니다.
프런트토토 사이트 추천 ErrorResponse를 수용할 준비가 되어 있어야 하며 다른 유형의 메시지가 나타날 때마다 통지응답 메시지가 나타납니다. 메시지. 또한, Listen(l) 명령을 실행하는 경우 다음과 같아야 합니다. 언제든지NotificationResponse 메시지를 받아들일 준비가 되어 있습니다. 참조 아래.
프런트엔드가 listening(l) 명령을 실행하면 백토토 사이트 추천 NotificationResponse 메시지를 보냅니다(혼동하지 마세요). NoticeResponse!)에 대해 inform(l) 명령이 실행될 때마다 동일한 알림 이름입니다.
알림 응답은 언제든지 허용됩니다. 프로토콜(시작 후), 다른 백엔드 메시지 내 제외. 따라서 프런트엔드는 다음을 인식할 수 있도록 준비해야 합니다. 메시지가 필요할 때마다 알림 응답 메시지입니다. 실제로, NotificationResponse 메시지를 처리할 수 있어야 합니다. 쿼리에 참여하지 않은 경우에도 마찬가지입니다.
알림(l) 명령이 다음 이름에 대해 실행되었습니다. 이전 Listen(l) 명령이 실행되었습니다. 알림은 다음과 같습니다. 언제든지 보내드립니다.
듣기 및 사용에 사용된 이름은 지적할 가치가 있습니다. 통지 명령은 이름과 관련이 있을 필요가 없습니다. SQL 데이터베이스의 관계(테이블). 알림 이름은 다음과 같습니다. 단순히 임의로 선택한 조건 이름입니다.
쿼리를 처리하는 동안 프런트엔드에서 요청할 수 있습니다. 적절한 요청을 보내 쿼리를 취소합니다. 우체국장. 취소 요청은 백엔드로 직접 전송되지 않습니다. 구현 효율성의 이유로: 우리는 백토토 사이트 추천 작업 중에 프론트엔드의 새로운 입력을 지속적으로 확인합니다. 쿼리 처리. 취소 요청은 비교적 자주 발생하지 않아야 합니다. 그래서 우리는 패널티를 피하기 위해 약간 번거롭게 만듭니다. 일반적인 경우입니다.
취소 요청을 발행하기 위해 프런트엔드는 새로운 연결을 엽니다 포스트마스터에게 대신 CancelRequest 메시지를 보냅니다. 일반적으로 전송되는 StartupPacket 메시지 새로운 연결. 포스트마스터가 이 요청을 처리한 다음 연결을 닫습니다. 보안상의 이유로 직접적인 답변은 드리지 않습니다. 취소 요청 메시지로 이동합니다.
CancelRequest 메시지는 다음을 포함하지 않는 한 무시됩니다. 동일한 키 데이터(PID 및 비밀 키)가 프런트엔드에 전달되었습니다. 연결 시작. 요청이 PID 및 비밀 키와 일치하는 경우 현재 실행 중인 백엔드에 대해 포스트마스터는 백엔드에서 현재 쿼리 처리를 중단합니다.
취소 신호는 효과가 있을 수도 있고 없을 수도 있습니다 --- 예를 들어 백엔드가 처리를 마친 후에 도착하는 경우 쿼리를 수행하면 아무런 효과가 없습니다. 취소인 경우 효과적이면 현재 명령이 조기에 종료됩니다. 오류 메시지와 함께.
이 모든 것의 결과는 보안과 보안상의 이유로 효율성 측면에서 프런트엔드는 취소 여부를 직접 알 수 있는 방법이 없습니다. 요청이 성공했습니다. 백엔드가 완료될 때까지 계속 기다려야 합니다. 쿼리에 응답합니다. 취소하면 확률이 높아집니다. 현재 쿼리가 곧 완료될 가능성이 높아집니다. 성공하는 대신 오류 메시지와 함께 실패합니다.
취소 요청이 포스트마스터에게 전송되고 취소 요청이 전송되지 않기 때문에 일반 프런트엔드/백엔드 통신 링크를 통해 취소 요청은 어떤 프로세스에서나 발행될 수 있습니다. 쿼리가 취소될 프런트엔드입니다. 이 내용은 일부 있을 수 있습니다. 다중 프로세스 애플리케이션 구축 시 유연성의 이점. 또한 승인되지 않은 사람이 보안 위험을 초래합니다. 쿼리를 취소하려고 할 수도 있습니다. 보안 위험은 다음에 의해 해결됩니다. 동적으로 생성된 비밀 키를 제공해야 함 요청을 취소하세요.
정상적이고 정상적인 종료 절차는 프런트엔드가 Terminate 메시지를 보내고 즉시 연결을 닫습니다. 켜기 메시지를 수신하면 백토토 사이트 추천 즉시 접속하고 종료합니다.
소프트웨어 오류로 인해 비정상 종료가 발생할 수 있습니다. (즉, 코어 덤프). 프런트엔드나 백엔드 중 하나가 표시되는 경우 예상치 못한 연결 종료로 인해 연결이 정리되고 종료합니다. 프런트엔드에는 새 백엔드를 시작할 수 있는 옵션이 있습니다. 종료를 원하지 않는 경우 포스트마스터에게 다시 연락하여 그 자체.