1、架构基础

 

PostgreSQL是一个功能强大的开源对象-关系数据库服务器(ORDBMS)。pgsql使用了客户端/服务器模式。一个pgsql会话包含包含两个进程:

服务器进程。管理数据库文件,接收客户端程序的连接请求,代表客户端执行数据库操作。数据库服务器程序叫做postgres。


客户端应用程序。进行数据库操作。客户端应用程序本质上可以非常多样化,一个客户端可以是一个面向文本的工具,一个图形界面应用程序,一个通过访问数据库来显示网页的web服务器,或者一个专门的数据库维护工具。有些是pgsql自带的,大部分是用户开发的。

客户端和服务器可以在不同的主机上,通过TCP/IP连接通信。记住这一点很重要,因为客户机上的文件再服务器上可能是访问不到的,或者只能换个文件名访问。

pgsql服务器可以处理多并发的连接,它会为每个连接fork一个新的进程。客户端和新的服务器进程的通信与就服务器进程没有关系。主服务器进程会一直保持运行,等待客户端连接。

 

2、为什么要使用 PostgreSQL

 

PostgreSQL 具有许多旨在帮助开发人员构建应用程序、管理员保护数据完整性和构建容错环境的功能,并帮助您管理数据,无论数据集有多大。除了免费和开源之外,PostgreSQL 还具有高度的可扩展性。例如,您可以定义自己的数据类型、构建自定义函数,甚至无需重新编译数据库即可使用不同的编程语言编写代码。

 

3、ORDBMS 术语

 

数据库: 数据库是一些关联表的集合。

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。

**行:**一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

**外键:**外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

**索引:**使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

 

4、PostgreSQL 特征

 

函数:通过函数,可以在数据库服务器端执行指令程序。


索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。


触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。 多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。


规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。


数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据


等。


全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。


NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。


数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。

 

5、PostgreSQL 功能列表

 

(1)数据类型

基本类型:Integer 整数、Numeric 数字、String 字符串、Boolean 布尔值

结构类型:Date/Time 日期/时间、Array 数组、,Range 范围/多范围、UUID

文档类型:JSON/JSONB、XML、Key-value (Hstore)

几何类型:Point 点、Line 线、Circle 圆、Polygon 多边形

自定义类型:Composite 复合、Custom Types 自定义类型

(2)数据的完整性

唯一,非空

主键

外键

排除约束

显式锁、咨询锁

并发、性能

索引:B 树、多列、表达式

高级索引:GiST、SP-Gist、KNN Gist、GIN、BRIN、覆盖索引、布隆过滤器

复杂的查询规划器/优化器、仅索引扫描、多列统计

事务、嵌套事务(通过保存点)

多版本并发控制 (MVCC)

并行化读取查询和构建 B 树索引

表分区

(3)SQL 标准中定义的所有事务隔离级别,包括 Serializable

表达式的即时 (JIT) 编译

可靠性、灾难恢复

预写日志 (WAL)

复制:异步、同步、逻辑

时间点恢复 (PITR),活动备用

表空间

安全

身份验证:GSSAPI、SSPI、LDAP、SCRAM-SHA-256、证书等

强大的访问控制系统

列级和行级安全

使用证书和其他方法进行多因素身份验证

可扩展性

(4)存储函数和过程

过程语言:PL/PGSQL、Perl、Python(等等)

SQL/JSON 路径表达式

外部数据包装器:使用标准 SQL 接口连接到其他数据库或流

可定制的表格存储界面

许多提供附加功能的扩展,包括 PostGIS

国际化,文本搜索

支持国际字符集,例如通过 ICU 排序规则

不区分大小写和不区分重音的排序规则

全文检索