참고 :Phil Thompson ( 작성<phil@river-bank.demon.co.uk). Tom Lane의 프로토콜 2.0 업데이트 (<tgl@sss.pgh.pa.us).
Postgres메시지 기반을 사용합니다 프론트 엔드와 백엔드 간의 커뮤니케이션 프로토콜. 그만큼 프로토콜이 구현 됨TCP/IP그리고 유닉스 소켓에도Postgres6.3 도입 버전 번호 프로토콜. 이것은 여전히 허용하는 방식으로 이루어졌습니다. 이전 버전의 Frontends에서 연결되었지만이 문서 이전 버전에서 사용하는 프로토콜을 다루지 않습니다.
이 문서는 프로토콜의 버전 2.0을 설명합니다. 구현Postgres6.4 및 나중에.
이 프로토콜을 기반으로 구축 된 더 높은 레벨 기능 (예 : 어떻게libpq특정 환경을 통과합니다 연결이 설정된 후 변수)가 포함됩니다 다른 곳.
세 가지 주요 구성 요소는 프론트 엔드입니다 ( 클라이언트) 및 우체국 장 및 백엔드 (서버에서 실행). 우체국 장과 백엔드는 다른 역할을하지만 동일한 실행 파일에 의해 구현되었습니다.
프론트 엔드는 스타트 업 패킷을 우체국 장에게 보냅니다. 이것 사용자의 이름과 사용자가 원하는 데이터베이스를 포함합니다. 연결합니다. 그런 다음 우체국 장은 이것을 사용합니다 의 정보PG_HBA.conf파일 추가 인증 정보를 결정합니다 프론트 엔드가 (있는 경우) 보내야하고 그에 따라 프론트 엔드.
프론트 엔드는 필요한 인증을 보냅니다 정보. 우체국 장이이를 확인하면 응답합니다 그것이 인증 된 프론트 엔드 백엔드 연결. 그런 다음 백엔드는 메시지를 보냅니다 성공적인 시작 (정상적인 경우) 또는 실패 (for 예를 들어, 유효하지 않은 데이터베이스 이름).
후속 통신은 쿼리 및 결과 패킷입니다 프론트 엔드와 백엔드 사이에서 교환되었습니다. 우체국 장 일반 쿼리/결과 통신에서 더 이상 참여하지 않습니다. (그러나 프론트 엔드가 원할 때 우체국 장은 관여합니다 현재 백엔드로 실행중인 쿼리를 취소합니다. 그것에 대한 자세한 내용은 아래에 나와 있습니다.)
프론트 엔드가 연결을 끊기를 원할 때 an을 보냅니다 적절한 패킷과 대기하지 않고 연결을 닫습니다 백엔드에 대한 응답.
패킷은 데이터 스트림으로 전송됩니다. 첫 번째 바이트가 결정됩니다 나머지 패킷에서 예상되는 것. 그만큼 예외는 프론트 엔드에서 우체국 장으로 전송 된 패킷입니다. 패킷 길이와 패킷 자체를 포함합니다. 그만큼 차이는 역사적입니다.