PostgreSQL 是用一个简单的"每用户一进程" 的client/server 模型实现的。 在这种模式里一个客户端进程只是与一个服务器进程联接。 因为我们不知道具体要建立多少个联接, 所以我们不得不利用一个主进程在每次联接请求时派生出一个新的服务器进程来。 这个主进程叫做 postmaster, 它监听着一个特定的 TCP/IP 端口等待进来的联接。 每当检测到一个联接请求时,postmaster 进程派生出一个新的叫 postgres的服务器进程。 服务器任务(postgres 进程)相互之间使用信号灯和共享内存进行通讯, 以确保在并行的数据访问过程中的数据完整性。
客户端进程可以是任何理解 PostgreSQL 协议(在 Chapter 44 里描述)的程序。 许多客户端都是基于 C 语言库 libpq,但是也存在几个独立的实现,比如 Java JDBC 驱动。
一旦建立起来联接, 客户端进程就可以向后端(服务器)进程发送查询了。 查询是通过纯文本传输的,也就是说在 前端(客户端)不做任何分析处理。 服务器分析查询,创建执行规划, 执行该规划并且通过已经建立起来的连接把检索出来的数据行返回给客户端。