🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 46.2\. 连接是如何建立起来的 PostgreSQL是用一个简单的"每用户一进程" 的 client/server 模型实现的。在这种模式里一个_客户端进程_ 只与恰好一个_服务器进程_连接。因为不知道具体要建立多少个连接, 所以不得不利用一个_主进程_在每次连接请求时派生出一个新的服务器进程来。 这个主进程叫做`postgres`,它监听着一个特定的 TCP/IP 端口等待进来的连接。 每当检测到一个连接请求时,`postgres`进程派生出一个新的服务器进程。 服务器进程之间使用_信号灯_和_共享内存_进行通讯, 以确保在并发的数据访问过程中的数据完整性。 客户端进程可以是任何理解PostgreSQL协议(在[Chapter 48](#calibre_link-632) 里描述)的程序。许多客户端都是基于 C 语言库libpq的程序, 但是也存在几个对协议独立的实现,比如 Java JDBC驱动。 一旦建立起来连接,客户端进程就可以向_后端_(服务器)进程发送查询了。 查询是通过纯文本传输的,也就是说在_前端_(客户端)不做任何分析处理。服务器分析查询, 创建_执行规划_,执行该规划并且通过已经建立起来的连接把检索出来的数据行返回给客户端。