Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
배트맨 사설 토토 : 문서 : 9.3 : Frontend/백엔드 프로토콜 | 배트맨 사설 토토 : 문서 : 9.3 : Frontend/백엔드 프로토콜 | 48 장. 프론트 엔드/백엔드 프로토콜 | PostgreSQL : 문서 : 9.3 : 토토 사이트 흐름 |
프로토콜에는 시작 및 정상에 대한 별도의 단계가 있습니다 작업. 스타트 업 단계에서 프론트 엔드는 연결을 엽니 다. 서버는 섬기는 사람. (여기에는 단일 사설 토토 또는 여러 사설 토토가 포함될 수 있습니다 사용중인 인증 방법에 따라 그런 다음 서버는 상태 정보를 프론트 엔드로 보냅니다. 마지막으로 정상적인 작동에 들어갑니다. 초기를 제외하고 스타트 업 요청 사설 토토, 프로토콜 의이 부분은 섬기는 사람.
정상 작동 중에 프론트 엔드는 쿼리 및 기타를 보냅니다 백엔드 명령 및 백엔드는 쿼리 결과를 다시 보냅니다. 그리고 다른 응답. 몇 가지 사례가 있습니다 (예 :Notify) 백엔드는 원치 않는 보내지 않습니다 사설 토토이지만 대부분의 경우 세션 의이 부분이 주도됩니다. 프론트 엔드 요청.
세션 종료는 일반적으로 Frontend 선택에 의한 것이지만 어떤 경우에는 백엔드에 의해 강요 될 수 있습니다. 어쨌든 언제 백엔드는 연결을 닫고 열린 모든 롤백을 롤백합니다. (불완전한) 종료하기 전의 거래.
정상 작동 내에서 SQL 명령을 실행할 수 있습니다 두 개의 하위 프로토콜 중 하나입니다. 에서"간단합니다 질문"프로토콜, 프론트 엔드는 텍스트 쿼리를 보냅니다 문자열은 백엔드에 의해 구문 분석되고 즉시 실행됩니다. ~ 안에 그만큼"확장 쿼리"프로토콜, 쿼리 처리는 여러 단계로 구분됩니다 : 구문 분석, 매개 변수 값의 바인딩 및 실행. 이것은 유연성을 제공합니다 추가 복잡한 비용으로 성능 혜택.
정상 작동에는 특별한 서브 프로토콜이 있습니다 와 같은 작업copy.
모든 커뮤니케이션은 사설 토토 흐름을 통해 이루어집니다. 첫 번째 메시지의 바이트는 메시지 유형을 식별하고 다음 4 개를 식별합니다. 바이트는 나머지 메시지의 길이를 지정합니다 (이 길이 카운트에는 자체가 포함되지만 메시지 유형 바이트는 포함되지 않습니다). 그만큼 메시지의 나머지 내용은 메시지에 의해 결정됩니다. 유형. 역사적 이유로 클라이언트 (시작 메시지)는 초기 메시지 유형 바이트가 없습니다.
사설 토토 스트림과 동기화를 잃지 않도록합니다 서버 및 클라이언트는 일반적으로 전체 사설 토토를 버퍼로 읽습니다. (바이트 카운트 사용) 내용을 처리하기 전에. 처리 중에 오류가 감지되면 쉽게 복구 할 수 있습니다. 내용. 극한 상황에서 (충분하지 않은 것과 같은 사설 토토를 버퍼링하는 메모리), 수신기는 바이트 카운트를 사용할 수 있습니다. 읽기 재개하기 전에 건너 뛰는 입력의 양을 결정하려면 사설 토토.
반대로, 서버와 클라이언트는 절대로주의를 기울여야합니다. 불완전한 사설 토토를 보내십시오. 이것은 일반적으로 마샬링하여 수행됩니다 보내기 시작하기 전에 버퍼의 전체 사설 토토. 경우 a 통신 실패는 발송 또는 수신을 통해 부분적으로 발생합니다 사설 토토, 유일한 현명한 응답은 연결을 포기하는 것입니다. 사설 토토에 대한 회복에 대한 희망은 거의 없기 때문입니다 동기화.
확장 쿼리 프로토콜에서 SQL 명령의 실행은 다음과 같습니다 여러 단계로 나뉩니다. 단계 사이에 보유 된 국가는입니다 두 가지 유형의 개체로 표시 :준비 진술and포털. 준비된 진술은 구문 분석 및 시맨틱 분석의 결과를 나타냅니다. 텍스트 쿼리 문자열. 준비된 진술 자체가 준비되지 않았습니다 실행하려면에 대한 특정 값이 부족할 수 있기 때문에매개 변수. 포털은 즉시 사전에 사전을 나타냅니다 또는 누락 된 매개 변수와 함께 이미 입증 된 진술 채워진 값. (forselect진술, 포털은 열린 커서와 동일하지만 우리는 커서가 비 처리되지 않기 때문에 다른 용어select진술.)
전체 실행주기는 A로 구성됩니다.파스Step 텍스트 쿼리 문자열; 에이bind단계 준비된 진술과 값이 주어진 포털을 만듭니다. 필요한 매개 변수; 그리고 Aexecute단계 포털의 쿼리가 실행됩니다. 쿼리의 경우 반환됩니다 줄 (select, Show등), 실행 단계는 가져 오라고 말할 수 있습니다. 제한된 수의 행만이므로 여러 실행 단계가 작업을 완료해야합니다.
백엔드는 여러 준비된 진술을 추적 할 수 있으며 포털 (그러나 이들은 세션 내에 만 존재하며 세션을 통해 공유하지 않았습니다). 기존 준비된 진술 및 포털은 생성 될 때 지정된 이름으로 참조됩니다. ~ 안에 추가, an"이름없는"준비 진술과 포털이 존재합니다. 이것들은 크게 동일하게 행동하지만 명명 된 객체로서, 그들에 대한 작업은의 경우에 최적화됩니다. 쿼리를 한 번만 실행 한 다음 버려지는 동안 이름이 지정된 개체의 작업은 다중 용도.
특정 데이터 유형의 데이터는 몇 가지 다른형식. 기준postgresql7.4 유일한 지원 형식은"텍스트"and"Binary"그러나 프로토콜은 제공합니다 향후 확장. 임의의 값에 대한 원하는 형식은 다음과 같이 지정됩니다 에이형식 코드. 클라이언트는 a를 지정할 수 있습니다 각 전송 된 매개 변수 값과 각각에 대한 형식 코드 쿼리 결과의 열. 텍스트에는 형식 코드가 있고 바이너리는 있습니다 형식 코드 1 및 기타 모든 형식 코드는 향후에 예약되어 있습니다. 정의.
값의 텍스트 표현은 문자열이 무엇이든간에 있습니다 입력/출력 변환 함수에 의해 생성 및 허용됩니다 특정 데이터 유형. 전송 된 표현에서 후행 널 캐릭터가 아닙니다. 프론트 엔드는 하나를 추가해야합니다 C 줄로 처리하려면 값을 받았습니다. (텍스트 형식은 내장 널을 허용하지 않습니다.)
정수에 대한 이진 표현 네트워크 바이트 주문 (대부분 중요한 바이트는 먼저). 다른 데이터 유형은 바이너리에 대해 배우는 문서 또는 소스 코드 대표. 이진 표현을 명심하십시오 복잡한 데이터 유형은 서버 버전에서 변경 될 수 있습니다. 텍스트 형식은 일반적으로 더 휴대용 선택입니다.