第 2 章 体系结构
2.1. Postgres 体系结构概念 #
在我们开始之前,你应当理解基本的 Postgres 系统体系结构。理解 Postgres 的各个部分如何交互将使下一章更容易理解。用数据库术语来说,Postgres 使用一种简单的 "每用户一进程"客户端/服务器模型。一个 Postgres 会话由下列相互协作的 Unix 进程(程序)组成:
一个监管守护进程(postmaster),
用户的前端应用(例如 psql 程序),以及
一个或多个后端数据库服务器(postgres 进程本身)。
一个 postmaster 管理单个主机上一个给定的数据库集合。这样的数据库集合称为一个(数据库)集群。希望访问集群内某个给定数据库的前端应用对库进行调用。库通过网络把用户请求发送给 postmaster(图 2.1),后者转而启动一个新的后端服务器进程
图 2.1. 如何建立一个连接

并把前端进程连接到新的服务器。从那时起,前端进程和后端服务器进行通信而无需
postmaster 干预。因此,postmaster 总是在运行,等待请求,而前端和后端进程则来来去去。
libpq 库允许单个前端建立到多个后端进程的连接。但是,前端应用仍然是单线程进程。目前 libpq 不支持多线程的前端/后端连接。这种体系结构的一个含义是
postmaster 和后端总是在同一台机器(数据库服务器)上运行,而前端应用可以运行在任何地方。你应当牢记这一点,因为在客户机上可以访问的文件在数据库服务器机器上可能无法访问(或者只能用不同的文件名访问)。
你还应当知道,postmaster 和 postgres 服务器以 Postgres "超级用户"的用户 ID 运行。注意 Postgres 超级用户并不非得是特殊用户(例如名为 "postgres" 的用户)。而且,Postgres 超级用户绝对不应当是 Unix 超级用户("root")!任何情况下,与某个数据库相关的所有文件都应当属于这个 Postgres 超级用户。