참고:필 톰슨 작성(
<phil@river-bank.demon.co.uk). Tom Lane의 프로토콜 2.0 업데이트(<tgl@sss.pgh.pa.us).
PostgreSQL다음을 사용합니다 프런트엔드와 프런트엔드 간의 통신을 위한 메시지 기반 프로토콜 백엔드. 프로토콜은 다음과 같이 구현됩니다.TCP/IP그리고 Unix 도메인 소켓에서도 마찬가지입니다.PostgreSQL6.3 도입 버전 번호를 프로토콜에 추가합니다. 이것은 다음과 같은 방식으로 이루어졌습니다. 이전 버전의 프런트엔드로부터의 연결을 계속 허용하려면 하지만 이 문서는 해당 사용자가 사용하는 프로토콜을 다루지 않습니다. 이전 버전.
이 문서는 프로토콜 버전 2.0에 대해 설명합니다. 에서 구현됨PostgreSQL6.4 그리고 나중에.
이 프로토콜을 기반으로 구축된 더 높은 수준의 기능(예: 어떻게libpq특정 환경을 통과함 연결이 설정된 후의 변수)는 다룹니다. 다른 곳.
프런트엔드는 서버에 대한 연결을 열고 다음을 보냅니다. 시작 패킷. 여기에는 사용자 이름과 이름이 포함됩니다. 사용자가 연결하려는 데이터베이스. 그런 다음 서버는 다음을 사용합니다. 이 정보와pg_hba.conf추가 사항을 결정하기 위한 파일 인증 정보를 보내려면 프런트엔드가 필요합니다. any) 그에 따라 프런트엔드에 응답합니다.
프런트엔드는 필요한 인증을 보냅니다. 정보. 서버가 이를 검증하면 다음 사항에 응답합니다. 인증을 받고 메시지를 보내는 프런트엔드 성공적인 시작(일반적인 경우) 또는 실패(예: 예, 잘못된 데이터베이스 이름).
여러 클라이언트에 효율적으로 서비스를 제공하기 위해 서버는 새로운 것을 시작합니다"백토토 베이"프로세스 각 클라이언트. 그러나 이는 프로토콜에 투명합니다. 에서 현재 구현에서는 새로운 하위 프로세스가 생성됩니다. 들어오는 연결이 감지된 직후.
프런트엔드가 연결을 끊으려고 할 때 다음을 보냅니다. 적절한 패킷을 기다리고 기다리지 않고 연결을 닫습니다. 백엔드의 응답을 위해.
패킷은 데이터 스트림으로 전송됩니다. 첫 번째 바이트가 결정합니다. 패킷의 나머지 부분에서 예상되는 내용. 는 예외는 시작의 일부로 전송된 패킷과 패킷 길이로 구성된 인증 교환 패킷 자체가 뒤따릅니다. 차이점은 다음과 같습니다. 역사적.