第三十六章. 体系结构

Postgres 体系概念

在我们开始之前,我们应该理解一些 Postgres 系统体系的基本概念.理解了 Postgres 各部分之间的相互作用能让我们更容易理解下一章的内容.在数据库的范畴里,Postgres 使用一个简单的"每用户一进程"的client/server 模型.一个 Postgres 会话由下面一些UNIX进程(程序)组成: 一个 postmaster 管理某台主机上的一定的数据库集合.这个集合叫做一次安装或节点(?site).如果某个前端应用想访问某个节点中的某一数据库,它就会进行库(函数)调用.库把用户的请求通过网络发给 postmaster联接是如何建立的(a)),postmaster接着便启动一个新的后端服务进程 (联接是如何建立的(b))
 
图 36-1. 联接是如何建立的

并将前端进程和这个新的服务进程联接起来(H联接是如何建立起来的(c)). 从这时起,前端进程和后端服务将不再通过postmaster 而是直接进行通讯.因而,postmaster总是在运行,等待着请求,而前后端进程则是起起停停.libpq 库能够让一个前端与后端做多个联接.然而,前端应用仍然是一个单线程的进程.现在 libpq 还不支持多线程的前/后端联接.这种体系结构表明 postmaster 和后端总是跑在同一台机器上(数据库服务器),而前端应用可以在任何地方运行.必须牢记这一点,因为在客户机上用户可以访问的文件在数据库服务器上不一定可以访问(或者只能通过不同的文件名访问).同时我们还应该注意 postmaster 和 postgres 服务进程是以Postgres"超级用户"的用户标识(user-id)运行的.要注意的是Postgres超级用户不一定非要是一个特殊的用户(如,一个叫 "postgres"的用户).另外,Postgres 超级用户绝不能是UNIX 超级用户("root")!在任何情况下,所有与数据库有关的文件都属于Postgres 超级用户.