在我们继续之前,我们应该理解一些 Postgres系统体系的基本概念.理解了 Postgres 各部分之间的相互作用能让 我们更容易理解下一章的内容.在数据库的范畴里, Postgres 使用一个简单的"每用户一进程"的 client/server 模型.一个 Postgres 会话由下面一些UNIX进程(程序)组成:
一个监控的守护进程 (postmaster),
用户的前端应用(如,psql 程序),和
一个或者多个后端数据库服务器 (postgres进程本身).
一个 postmaster 管理某台主机上的一定的数据库集合. 这个数据库集合叫做一个(数据库的)集群. 如果某个前端应用想访问某个节点中的某一数据库, 它就会进行库(函数)调用. 库把用户的请求通过网络发给 postmaster (Figure 11-1(a)), postmaster接着便启动一个新的后端服务进程 (Figure 11-1(b)))
并将前端进程和这个新的服务进程联接起来 (Figure 11-1(c)). 从这时起,前端进程和后端服务将不再通过 postmaster 而是直接进行通讯.因而, postmaster 总是在运行,等待着请求,而前后端进程则是起起停停. libpq 库能够让一个前端与后端做多个联接. 然而,前端应用仍然是一个单线程的进程.现在的 libpq 还不支持多线程的前/后端联接. 这种体系结构表明 postmaster 和后端总是跑在同一台机器上(数据库服务器), 而前端应用可以在任何地方运行.必须牢记这一点, 因为在客户机上用户可以访问的文件在数据库服务器上不一定可 以访问(或者只能通过不同的文件名访问).同时我们还应该注意 postmaster 和 postgres 服务进程是以 Postgres "超级用户"的用户标识(user-id)运行的.要注意的是 Postgres 超级用户不一定非要是一个特殊 的用户(如,一个叫 "postgres"的用户).另外, Postgres 超级用户绝不能是UNIX 超级用户("root")!在任何 情况下,所有与数据库有关的文件都属于 Postgres 超级用户.