第 10 章 体系结构
10.1. PostgreSQL 体系结构概念 #
在开始之前,你应当理解 PostgreSQL 系统的基本体系结构。理解 PostgreSQL 各部分的交互方式会让下一章更容易理解。用数据库术语来说,PostgreSQL 使用简单的"每用户一进程"客户端/服务器模型。一个 PostgreSQL 会话由下列协作的 Unix 进程(程序)组成:
一个管理守护进程(postmaster),
用户的前端应用(例如 psql 程序),以及
一个或多个后端数据库服务器(postgres 进程本身)。
单个 postmaster 管理单个主机上给定的数据库集合。这样的数据库集合称为(数据库)集群。希望访问集群中某个数据库的前端应用调用链接进该应用的接口库(例如 libpq)。该库通过网络把用户请求发送给 postmaster (图 10.1(a)),后者再启动一个新的后端服务器进程 (图 10.1(b))
图 10.1. 如何建立连接
并把前端进程连接到新服务器
(图 10.1(c))。从那时起,前端进程和后端服务器之间的通信不再需要
postmaster 干预。因此,
postmaster 总是在运行并等待连接请求,而前端和后端进程则来来去去。libpq 库允许单个前端对后端进程建立多个连接。但是,每个后端进程都是单线程进程,一次只能执行一个查询;因此任何一条前端到后端连接上的通信都是单线程的。
这一体系结构的一个含义是 postmaster 和后端总是运行在同一台机器(数据库服务器)上,而前端应用可以运行在任何地方。你应当牢记这一点,因为在客户端机器上可以访问的文件在数据库服务器机器上可能无法访问(或者只能用不同的路径名访问)。
你还应当知道
postmaster 和
postgres 服务器以
PostgreSQL
“超级用户”的用户
ID 运行。注意
PostgreSQL 超级用户不必是任何特定的用户(例如名为
postgres 的用户),虽然许多系统就是这样安装的。而且,PostgreSQL 超级用户绝对不应该是 Unix 超级用户
root!就周围的
Unix 系统而言,PostgreSQL 超级用户是一个普通的、无特权的用户是最安全的。无论如何,与数据库相关的所有文件都应属于这个
Postgres 超级用户。