PostgreSQL 系统的基本体系结构
PostgreSQL 使用客户机/服务器(C/S)的模式提供服务,一个PostgreSQL会话由下列相关的进程(程序)组成:
(1)一个服务器端进程。该进程管理数据库文件,接受客户端与数据库的连接,且代表客户端对数据库进行操作。该进程的程序名叫做 postgres。
(2)前端应用,即需要进行数据库操作的客户端应用。客户端应用可能本身就是多种多样的:它们可以是一个字符界 面的工具, 也可以是一个图形界面的应用,或者是一个通过访问数据库来显示网页的 web 服务器,或者是一个特殊的数据库管理工具。 一些客户端应用是和 PostgreSQL 发布一起提供的,但绝大部分是用户开发的。
和典型的客户端/服务器应用(C/S应用)一样,客户端和服务器可以在不同的主机上。此时,它们通过TCP/IP进行网络连接,你应该记住这一点,因为在客户机上可以访问的文件未必能够在数据库服务器机器上访问(或者只能用不同的文件名进行访问)。
PostgreSQL 服务器可以处理来自客户端的多个并发请求。为了能这样处理,它会为每个请求启动(“forks”)一个新的进程,然后,客户端和新服务器端进程就不再经过最初的postgres 进程而直接通信。 因此, 服务器端的主进程一直运行,等待着来自客户端的连接;而客户端和相关联的服务器端进程则在需要的时候才会运行。(当然,这些对用户来说是透明的,在这里谈这些主要是为了说明的完整性。)
PostgreSQL数据库是一种极好可以运行在各种平台上的免费的开放源码的对象关系数据库,它是一种以关系数据库和SQL为基础,扩展了抽象数据类型,从而具备面向对象特性的数据库。
PostgreSQL体系结构图(组成结构和关系)
PostgreSQL由连接管理系统(系统控制器),编译执行系统,存储管理系统,事务系统,系统表五大部分组成。
连接管理系统接受外部操作对系统的请求,对操作请求进行预处理和分发,起系统逻辑控制作用;
编译执行系统由查询编译器,查询执行器组成,完成操作请求在数据库中的分析处理和转化工作,最终实现物理存储介质中数据的操作;
存储管理系统由索引管理器,内存管理器,外存管理器组成,负责存储和管理物理数据,提供对编译查询系统的支持;
事务系统由事务管理器,日志管理器,并发控制,锁管理器组成,日志管理器和事务管理器完成对操作请求的事务一致性支持,锁管理器和并发控制提供对并发访问数据的一致性支持;
系统表是PostgreSQL数据库的元信息管理中心,包括数据库对象信息和数据库管理控制信息。系统表管理元数据信息,将PostgreSQL数据库的各个模块有机地连接在一起,形成一个高效的数据管理系统。
系统表
在关系数据库中,为了实现数据库系统的控制,必须提供数据字典的功能。数据字典不仅存储各种对象的描述信息,而且存储系统管理所需的各种对象的细节信息。数据字典包含数据库系统中所有对象及其属性的描述信息,对象之间关系的描述信息,对象属性的自然语言含义以及数据字典变化的历史,数据字典是关系数据库系统管理控制信息的核心,在PostgreSQL数据库系统中系统表扮演着数据字典的角色。
系统表是PostgreSQL数据库存放结构元数据的地方,他在PostgreSQL中表现为存放有系统信息的普通表或者视图(用户可以删除,重建)。
系统表保存了数据库的所有元数据,所以系统运行时对系统表的访问是非常频繁的。为了提高系统性能,在内存中建立了共享的系统表,使用Hash表提高查询效率。
主要系统表功能
1 pg_namespace 存储命名空间
2 pg_tablespace 存储空间信息
3 pg_database 存储当前数据集簇中数据库的信息。
4 pg_class 存储表及与表类似结构的数据库对象信息,包含,索引,序列,视图,复合数据类型,TOAST表等。
5 pg_type 存储数据类型信息。
6 pg_attribute 存储表的属性信息。
7 pg_index 存储索引的具体信息。
关键系统表之间的依赖关系:未列出
PostgreSQL 系统的基本体系结构的更多相关文章
- PostgreSQL 系统表
postgres=# \d pg_class Table "pg_catalog.pg_class" Column | Type | Modif ...
- postgreSQL使用
1.1. 安装 自然,在你想开始使用 PostgreSQL 之前, 你必须安装它.PostgreSQL 很有可能 已经安装到你的节点上了,因为它包含在你的操作系统的发布里, 或者是系统管理员已 ...
- ubuntu下postgreSQL安装配置
一.安装并配置,并设置远程登陆的用户名和密码 1.安装postgreSQL sudo apt-get update sudo apt-get install postgresql-9.4 在Ubunt ...
- centos下postgresql的安装与配置[转]
本文摘自:http://blog.chinaunix.net/uid-24846094-id-78490.html 一.安装(以root身份进行) 1.检出最新的postgresql的yum配置从ht ...
- PostgreSQL数据库系统的进程结构
PostgreSQL数据库系统的主要功能都集中于Postgres程序,其入口是Main模块中的main函数,在初始化数据集簇,启动数据库服务器是,都将从这里开始执行.Main模块主要的工作时确定当前的 ...
- PostgreSQL在Ubuntu上安装指南
安装环境: Ubuntu 10.04-desktop-i386 PostgreSQL 8.4 1. 安装PostgreSQL 输入如下命令 sudo apt-get install postgresq ...
- 跟我一起读postgresql源码(八)——Executor(查询执行模块之——可优化语句的执行)
2.可优化语句的执行 可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理.该模块对外提供了三个接口: ExecutorStart.Executo ...
- 跟我一起读postgresql源码(九)——Executor(查询执行模块之——Scan节点(上))
从前面介绍的可优化语句处理相关的背景知识.实现思想和执行流程,不难发现可优化语句执行的核心内容是对于各种计划节点的处理,由于使用了节点表示.递归调用.统一接口等设计,计划节点的功能相对独立.代码总体流 ...
- 免费开源ERP Odoo实施指南 连载二:POSTGRESQL概述
PostgreSQL是Odoo支持的数据库.PostgreSQL是起源于大学的一个历史很长的开源数据库系统.包括美国航天局NASA.德国证券交易中心.中国的平安.腾讯的微信支付.阿里巴巴的阿里云都在用 ...
随机推荐
- 20145317彭垚 《Java程序设计》第4周学习总结
20145317彭垚 <Java程序设计>第04周学习总结 20145317彭垚 <Java程序设计>第4周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行 ...
- Machine Learning in Action -- FP-growth
要解决的问题,频繁项集 最暴力的方法,就是遍历所有的项集组合,当然计算量过大 最典型的算法apriori, 算法核心思想,当一个集合不是频繁项集,那么它的超集也一定不是频繁项集 这个结论是很明显的,基 ...
- 用c++builder读取一个一行有多行变量的文件
文件内容如下: C DXDY.INP FILE, IN FREE FORMAT ACROSS COLUMNS for 83658 Active CellsC 2013-5-25 上午 10:43 ...
- MySQL常用SQL/函数汇总(持续更新)
自动生成ROWNUN SELECT (@rowNO := @rowNo+1) AS rowno,a.uuid FROM (SELECT * FROM h_log_proc) a,(SELECT @ro ...
- HTML5 Web Storage -- 让Cookies看起来如此古老
转载 原文 在此两部分组成的系列中,我们将来看看HTML5 规范中最棒而且最有趣的特性之一的Web Storage.我们将看看Web Storage 和 Cookies的历史,并从考虑以下几点: *C ...
- BAE3.0上的java+tomcat代码发布
---------------------------------2016/01/25更新-------------------------------------- 最近两天去百度开放云,发现它再也 ...
- 转一个 C#基础类库
转自:http://www.cnblogs.com/sufei/archive/2012/12/07/2807170.html http://www.sufeinet.com/thread-655-1 ...
- js判断ie版本号
jQuery 2.0 去除了对浏览器版本号的判断(它推荐特性检测),这里是一个老外写的原生判断方法,这段代码着实巧妙!既简介.有向后兼容!一般做法都是:正则搜索 USER_AGENT :但因为历史原 ...
- fseek的使用
一:概述 在官方文档里,对于fseek的描述是 Move to specified position in file,移到文件的某一个特殊位置 二:语法 status = fseek(fileID, ...
- Maximal Square || LeetCode
dp. #define MAX 1000 int rowLeft[MAX][MAX]; int colUp[MAX][MAX]; int dp[MAX][MAX]; void calRow(char ...