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

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