이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 베이 : 문서 : 17 : 53.1. 토토 베이버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

46.1. 개요

프로토콜에는 시작과 정상을 위한 별도의 단계가 있습니다. 운영. 시작 단계에서 프런트엔드는 연결을 엽니다. 서버에 접속하여 만족할 만큼 자신을 인증합니다. 서버. (여기에는 단일 메시지가 포함될 수도 있고 여러 메시지가 포함될 수도 있습니다. 사용 중인 인증 방법에 따라 메시지가 표시됩니다.) 모든 것이 잘 진행되면 서버는 상태 정보를 프론트엔드를 거쳐 마침내 정상 작동에 들어갑니다. 제외하고 초기 시작 요청 메시지에서 프로토콜의 이 부분은 다음과 같습니다. 서버에 의해 구동됩니다.

정상 작동 중에 프런트엔드는 토토 베이 및 기타 메시지를 보냅니다. 백엔드에 명령을 보내고 백엔드는 토토 베이 결과를 다시 보냅니다. 그리고 다른 응답들. 몇 가지 경우가 있습니다(예:알림) 여기서 백엔드는 원치 않는 메시지를 보냅니다. 하지만 대부분 세션의 이 부분은 프런트엔드 요청에 의해 구동됩니다.

세션 종료는 일반적으로 프런트엔드 선택에 의해 이루어지지만 경우에 따라 백엔드에 의해 강제될 수 있습니다. 어쨌든, 언제 백엔드가 연결을 닫으면 열려 있는 모든 연결을 롤백합니다. (불완전) 종료 전 거래.

정상적인 작업 내에서 다음을 통해 SQL 명령을 실행할 수 있습니다. 두 개의 하위 프로토콜 중 하나입니다. 에서"간단하다 토토 베이"프로토콜, 프런트엔드는 텍스트 토토 베이만 보냅니다. 백엔드에서 구문 분석되어 즉시 실행되는 문자열입니다. 에서"확장 토토 베이"프로토콜, 토토 베이 처리는 구문 분석, 매개변수 값 바인딩 및 실행. 이 제안 추가 비용으로 유연성과 성능 이점을 얻을 수 있습니다. 복잡성.

정상 작동에는 특수용 추가 하위 프로토콜이 있습니다. 다음과 같은 작업복사.

46.1.1. 메시징 개요

모든 의사소통은 메시지 스트림을 통해 이루어집니다. 첫 번째 메시지의 바이트는 메시지 유형을 식별하고 다음 4바이트는 나머지 메시지의 길이를 지정합니다(이것은 길이 수에는 자체가 포함되지만 메시지 유형 바이트는 포함되지 않습니다. 메시지의 나머지 내용은 다음에 의해 결정됩니다. 메시지 유형. 역사적인 이유로 인해 첫 번째 메시지는 클라이언트가 보낸 시작 메시지(시작 메시지)에는 이니셜이 없습니다. 메시지 유형 바이트.

메시지 스트림과의 동기화 손실을 방지하려면, 서버와 클라이언트 모두 일반적으로 전체 메시지를 읽습니다. 처리를 시도하기 전에 버퍼(바이트 수 사용) 그 내용. 오류가 감지되면 쉽게 복구할 수 있습니다. 내용을 처리하는 동안. 극단적인 상황(예: 메시지를 버퍼링할 메모리가 충분하지 않음), 수신자 바이트 수를 사용하여 건너뛸 입력량을 결정할 수 있습니다. 메시지 읽기를 재개하기 전에.

반대로, 서버와 클라이언트 모두 주의해야 합니다. 불완전한 메시지를 보내세요. 이는 일반적으로 마샬링을 통해 수행됩니다. 메시지를 보내기 전에 버퍼에 있는 전체 메시지. 만약에 전송 도중에 통신 장애가 발생하거나 메시지를 받으면 유일한 합리적인 응답은 포기하는 것입니다. 연결이 회복될 가능성이 거의 없기 때문에 메시지 경계 동기화.

46.1.2. 확장 토토 베이 개요

확장 쿼리 프로토콜에서 SQL 명령 실행은 다음과 같습니다. 여러 단계로 나누어져 있습니다. 단계 사이에 유지되는 상태 두 가지 유형의 객체로 표현됩니다.준비된 진술그리고포털. 준비된 진술은 다음을 나타냅니다. 텍스트 쿼리의 구문 분석 및 의미 분석 결과 문자열. 준비된 문 자체는 실행할 준비가 되어 있지 않습니다. 특정 값이 부족할 수 있기 때문입니다.매개변수. 포털은 다음을 나타냅니다. 실행할 준비가 되었거나 이미 부분적으로 실행된 명령문 누락된 매개변수 값이 채워졌습니다. (For선택문, 포털은 커서를 열었지만 다른 용어를 사용하기로 결정했습니다. 커서는 비-를 처리하지 않습니다.선택문장.)

전체 실행 주기는 다음으로 구성됩니다.파싱14021_14100바인드단계, 준비된 명령문을 바탕으로 포털을 생성하고 필요한 매개변수의 값 그리고실행포털의 쿼리를 실행하는 단계입니다. 에서 행을 반환하는 쿼리의 경우(선택, 표시등), 실행 단계에서는 제한된 수의 데이터만 가져오도록 지시받을 수 있습니다. 여러 실행 단계가 필요할 수 있으므로 작업을 완료하세요.

백엔드는 준비된 여러 명령문을 추적할 수 있습니다. 및 포털(단, 이는 세션 내에서만 존재한다는 점에 유의하세요. 세션 간에 공유되지 않습니다.) 기존 준비 명령문과 포털은 다음과 같은 경우 할당된 이름으로 참조됩니다. 그들은 창조되었습니다. 게다가,"이름 없음"준비된 성명과 포탈이 존재합니다. 이들은 명명된 객체와 거의 동일하게 동작하지만, 이에 대한 작업은 다음을 실행하는 경우에 최적화되어 있습니다. 한 번만 쿼리한 다음 삭제하는 반면, 명명된 객체는 여러 가지 기대에 따라 최적화됩니다. 사용합니다.

46.1.3. 형식 및 형식 코드

특정 데이터 유형의 데이터는 어떤 방식으로든 전송될 수 있습니다. 여러 가지 중형식. 현재PostgreSQL7.4 유일한 지원되는 형식은 다음과 같습니다."텍스트"그리고"바이너리", 그러나 프로토콜은 향후 확장을 위한 규정. 원하는 형식 값은 a로 지정됩니다.형식 코드. 클라이언트는 전송된 각 형식 코드를 지정할 수 있습니다. 매개변수 값과 쿼리 결과의 각 열에 대한 정보입니다. 텍스트에는 형식 코드 0, 바이너리에는 형식 코드 1이 있고 나머지는 모두 형식 코드는 향후 정의를 위해 예약되어 있습니다.

값의 텍스트 표현은 문자열이 무엇이든 상관없습니다. 입출력 변환 함수에 의해 생성되고 수용됨 특정 데이터 유형에 대해. 전송된 내용에 표현에는 후행 null 문자가 없습니다. 는 프런트엔드에서 처리하려면 수신된 값에 1을 추가해야 합니다. C 문자열로 사용됩니다. (텍스트 형식은 삽입을 허용하지 않습니다. 그런데 null입니다.)

정수에 대한 이진 표현은 네트워크 바이트 순서를 사용합니다. (가장 중요한 바이트 먼저). 다른 데이터 유형에 대해서는 바이너리에 대해 알아보기 위한 문서 또는 소스 코드 표현. 에 대한 이진 표현을 명심하십시오. 복잡한 데이터 유형은 서버 버전에 따라 변경될 수 있습니다. 는 일반적으로 텍스트 형식이 더 이식성이 좋은 선택입니다.