Postgres 是用一个简单的"每用户一进程"的client/server 模型实现的。 在这种模式里一个客户端进程 只是与一个服务器进程联接。 因为我们不知道具体 要建立多少个联接, 所以我们不得不利用一个主进程 在每次联接请求时派生出一个新的服务器进程来。 这个主进程叫做 postmaster, 它监听着一个特定的 TCP/IP 端口等待进来的联接。 每当检测到一个联接请求时,postmaster 进程派生出一个新的叫 postgres的服务器进程。服务器任务( postgres 进程)相互之间使用信号灯 和共享内存进行通讯, 以确保在并行的数据访问过程中的数据完整性。 图 \ref{connection} 显示了主进程 postmaster,服务器进程 postgres 和客户端应用之间的相互关系。
客户端进程要么是 psql 前端(用于交互的 SQL 查询) 要么是任意用 libpg 库实现的用户应用。请注意用 ecpg (Postgres 用于 C 的嵌入 SQL 预处理器) 实现的应用同样也使用这个库。
一旦建立起来联接, 客户端进程就可以向后端服务器进程发送查询了。 查询是通过纯文本传输的,也就是说在 前端(客户端)不做任何分析处理。 服务器分析查询,创建执行规划, 执行该规划并且通过已经建立起来的联接把检索出来的元组返回给客户端。