Перейти к основному содержимому

Протокол Frontend/Backend

PostgreSQL использует протокол, основанный на сообщениях, для связи между фронтендами и бэкендами (клиентами и серверами). Протокол поддерживается через TCP/IP, а также через сокеты Unix-домена. Номер порта 5432 был зарегистрирован в IANA как обычный номер TCP-порта для серверов, поддерживающих этот протокол, но на практике может использоваться любой непривилегированный номер порта.

В этом документе описывается версия 3.0 протокола, реализованная в PostgreSQL 7.4 и более поздних версиях. Описание более ранних версий протокола см. в предыдущих выпусках документации по PostgreSQL. Один сервер может поддерживать несколько версий протокола. Первоначальное сообщение startup-request сообщает серверу, какую версию протокола пытается использовать клиент. Если основная версия, запрашиваемая клиентом, не поддерживается сервером, соединение будет отклонено (например, это произойдет, если клиент запросит версию протокола 4.0, которая на момент написания этой статьи не существует). Если минорная версия, запрошенная клиентом, не поддерживается сервером (например, клиент запрашивает версию 3.1, а сервер поддерживает только 3.0), сервер может либо отклонить соединение, либо ответить сообщением NegotiateProtocolVersion, содержащим наивысшую минорную версию протокола, которую он поддерживает. После этого клиент может либо продолжить соединение с использованием указанной версии протокола, либо прервать соединение.

Чтобы эффективно обслуживать множество клиентов, сервер запускает новый процесс «backend» для каждого клиента. В текущей реализации новый дочерний процесс создается сразу после обнаружения входящего соединения. Однако это прозрачно для протокола. Для целей протокола термины «backend» и «сервер» взаимозаменяемы; точно так же взаимозаменяемы термины «frontend» и «клиент».