购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 PostgreSQL对象-关系数据库系统

PostgreSQL对象-关系数据库系统软件是一种功能强大、技术领先的开源DBMS系统软件,其软件许可完全开放。开发者可以基于任何目的使用、复制、修改和重新发布这套软件以及文档,不需要任何费用与签订任何书面协议。与MySQL数据库软件面向中小型信息系统数据库管理定位不同,PostgreSQL对象-关系数据库系统软件具有企业级数据库系统特性,适用于大型信息系统数据管理。用户在使用PostgreSQL数据库软件进行系统开发时,应对PostgreSQL数据库系统软件有所了解。

1.5.1 PostgreSQL数据库系统架构

PostgreSQL对象-关系数据库系统作为一个复杂的基础系统软件,它由很多功能程序组成。开发者在利用PostgreSQL数据库软件进行应用系统开发前,需要对PostgreSQL数据库系统架构有全面了解,其中包括数据库系统总体架构、系统运行架构、数据库逻辑与物理结构等。

1.系统总体架构

PostgreSQL数据库系统由客户端程序、PostgreSQL接口、后端服务进程(如Postmaster主进程、辅助进程、服务进程)程序、共享内存区、数据库存储文件五个层次的构件组成,其系统总体架构如图1-11所示。

图1-11 PostgreSQL数据库系统总体架构

PostgreSQL数据库系统采用典型的客户/服务器架构模式设计实现系统功能。客户端程序可以是数据库应用程序,也可以是数据库管理工具等。服务器端程序是DBMS各服务功能的进程程序。客户端程序通过网络协议连接数据库服务器,并通过数据库服务实例访问或管理数据库。

客户端程序一般采用JDBC或ODBC标准接口连接数据库服务实例,并通过它们实现对数据库的访问。客户端数据库管理工具(如pgAdmin 4或psql)则采用PostgreSQL数据库系统自身提供的接口Libpq连接数据库服务实例,并通过它对数据库进行管理。

服务器端程序包括Postmaster主进程、辅助进程和服务进程等功能程序。它们负责数据库服务器运行管理、数据库操作访问、数据库权限控制、数据库缓冲区管理、文件存储管理等服务器端工作。当PostgreSQL数据库服务器上电后,Postmaster主进程、辅助进程(Bgwriter、AutoVacu um、PgArch、WalWriter、PgStat、CheckPoint、Syslogger)、Postgres服务进程均被启动运行。

Postmaster主进程是一种守护进程,其主要负责控制数据库启停,监听客户端连接,为每个客户端连接请求fork(系统调用)一个Postgres服务进程,管理数据库数据文件,管理辅助进程运行,在数据库访问会话出错后进行恢复处理等。

辅助进程用于协助Postmaster主进程、Postgres服务进程管理数据库服务器运行和数据库访问。其中Bgwriter辅助进程负责将共享内存区中被修改的数据页写入磁盘文件;AutoVacuum辅助进程负责对数据库表中垃圾数据进行自动清除处理;PgArch辅助进程负责对预写式日志(Write Ahead Log,WAL)数据进行归档备份处理;WalWriter辅助进程负责将WAL缓冲区的数据写入文件;PgStat辅助进程负责收集处理数据库及其表对象的访问操作统计数据;CheckPoint辅助进程负责将事务检查点前的数据写入磁盘文件;Syslogger辅助进程负责将数据库运行日志信息写入系统日志文件。

Postgres服务进程为客户端请求提供服务,如数据库对象创建、数据库访问、数据库控制等操作处理。客户端提交的SQL命令均通过Postgres服务进程来执行。Postgres服务进程将处理结果通过接口返回客户端程序。

共享内存区是在PostgreSQL数据库服务器启动后分配的内存缓冲区,它为所有后端进程提供共享访问。共享内存区由共享内存池、WAL缓冲区、CommitLog(事务提交日志)缓冲区组成。共享内存池存放数据表和索引页面数据,提供后端进程操作访问。WAL缓冲区存放数据库预写式日志数据,由WalWriter辅助进程将缓冲区数据写入WAL文件。CommitLog缓冲区存放事务运行状态数据,提供事务程序访问。

数据库存储文件是在数据库安装软件所指定的服务器系统目录中存放的,它包括数据文件、WAL文件、配置文件、事务日志文件等。数据库服务器后端进程对系统目录中的各类文件进行存取访问。

2.系统运行架构

PostgreSQL数据库系统是一种采用典型客户/服务器架构模式实现的多进程软件系统。当数据库服务器启动时,首先运行Postmaster守护进程,该进程作为服务器主进程,将fork运行各个辅助进程(如Bgwriter后台写进程、AutoVacuum自动清理进程、PgArch预写日志归档进程、PgStat统计数据收集进程、CheckPoint检查点处理进程、WalWriter预写式日志写进程、Syslogger系统日志进程),对数据库服务器进行控制管理。当客户端进程连接数据库服务器后,服务器端Postmaster主进程将为每个客户端连接请求fork创建一个新的Postgres服务进程并与之交互,从而使得客户端进程通过Postgres服务进程实现数据库访问操作,其系统运行架构如图1-12所示。

PostgreSQL数据库服务器可以同时支持不同运行环境的客户端程序访问数据库服务器。多个客户端程序可以并发访问数据库服务器。它们均通过请求/响应方式连接访问PostgreSQL数据库服务器。在客户端程序向数据库发起连接请求时,Postmaster守护进程作为控制管理的主进程将会fork创建一个单独的Postgres服务进程以提供服务。若有多个客户端连接请求,守护进程Postmaster将创建多个Postgres服务进程来提供服务,以支持多个客户端程序的并发访问。

3.数据库逻辑与物理结构

为了掌握数据库开发与管理技术,学习者还需要理解数据库逻辑与物理结构原理。数据库逻辑结构是指DBMS数据库服务器为应用程序提供存取访问数据库对象的数据结构,即从编程逻辑视角来看待的数据库结构。数据库物理结构是指数据库组织与数据存储的文件结构,它涉及存储数据库信息的各类文件目录及其文件,如数据文件、日志文件、配置文件等。

图1-12 PostgreSQL数据库系统运行架构

在PostgreSQL数据库系统中,每个数据库服务器都可以创建与运行管理多个数据库,即数据库集簇。数据库集簇(Database Cluster)是指单个PostgreSQL数据库服务实例管理的数据库集合。一个数据库集簇包含多个用户,每个用户都拥有一个或多个数据库。PostgreSQL数据库的逻辑与物理结构如图1-13所示。

图1-13 PostgreSQL数据库逻辑与物理结构

在一个PostgreSQL数据库中,至少有一个名为public的默认模式。用户还可在数据库中创建自己的模式。模式可以理解为数据库中的用户目录,它用于组织和存储用户应用系统的数据库对象,如表、视图、索引、函数、存储过程、触发器等。例如,应用程序在存取访问数据库表时,通过“数据库名.模式名.表对象名”全称名在数据库逻辑结构中访问对象。在一个数据库中,不能有同名的多个模式。同样,在一个模式下也不能有相同名称的数据库对象。

数据库逻辑结构最终需要有对应的物理结构来实现。在PostgreSQL数据库服务器的data目录下,有不同子目录来物理存储数据文件、WAL预写日志文件、系统运行日志文件、配置文件、控制文件等,见表1-2。此外,data目录下还有若干配置文件,见表1-3。

表1-2 PostgreSQL数据库data目录的子目录

表1-3 PostgreSQL数据库data目录下的配置文件

1.5.2 PostgreSQL数据库软件组成

PostgreSQL数据库软件作为一类DBMS软件,它实现对象-关系DBMS的各个功能。由于PostgreSQL数据库软件采用客户/服务器架构模式实现,因此其软件程序分为客户端程序和服务器端程序。PostgreSQL数据库软件的客户端程序和服务器端程序组成如下:

1.PostgreSQL客户端程序

clusterdb:对PostgreSQL数据库中表进行重新聚簇。

createdb:创建一个新的PostgreSQL数据库。

createuser:创建一个新的PostgreSQL用户账户。

dropdb:删除一个PostgreSQL数据库。

dropuser:删除一个PostgreSQL用户账户。

ecpg:嵌入SQL C预处理器。

pg_amcheck:检查数据库之间的冲突。

pg_basebackup:获取PostgreSQL集簇的基础备份。

pgbench:在PostgreSQL上运行一个基准测试。

pg_config:检索已安装的PostgreSQL版本信息。

pg_dump:将一个PostgreSQL数据库转存到一个脚本程序或者其他归档文件中。

pg_dumpall:将一个PostgreSQL数据库集簇转储到一个脚本程序中。

pg_isready:检查PostgreSQL服务器的连接状态。

pg_receivewal:以流的方式从一个PostgreSQL服务器得到预写式日志。

pg_recvlogical:控制PostgreSQL逻辑解码流。

pg_restore:从pg_dump创建的备份文件中恢复PostgreSQL数据库。

pg_verifybackup:验证PostgreSQL集簇的基础备份的完整性。

psql:运行PostgreSQL交互终端。

reindexdb:重建PostgreSQL数据库索引。

vacuumdb:收集垃圾并分析PostgreSQL数据库。

2.PostgreSQL服务器端程序

initdb:创建一个新的PostgreSQL数据库集簇。

pg_archivecleanup:清理PostgreSQL WAL归档文件。

pg_checksums:在PostgreSQL数据库集簇中启用、禁用或检查数据校验和。

pg_controldata:显示一个PostgreSQL数据库集簇的控制信息。

pg_ctl:初始化、启停控制一个PostgreSQL服务器。

pg_resetwal:重置一个PostgreSQL数据库集簇的预写式日志以及其他控制信息。

pg_rewind:将一个PostgreSQL数据目录与另一个从该目录中复制出来的数据目录同步。

pg_test_fsync:为PostgreSQL判断最快的wal_sync_method。

pg_test_timing:度量计时开销。

pg_upgrade:升级PostgreSQL服务器实例。

pg_waldump:以可读形式显示一个PostgreSQL数据库集簇的预写式日志。

postgres:运行数据库服务器服务进程。

postmaster:运行数据库服务器守护进程。

1.5.3 PostgreSQL数据库管理工具

对数据库进行开发或运行管理都需要有相应的数据库管理工具。实现PostgreSQL数据库管理的工具有不少,既有开源工具,也有产品工具。这里只介绍两种使用最广泛的PostgreSQL开源数据库管理工具。

1.psql命令行工具

psql是PostgreSQL数据库软件内置的一个客户端工具,该工具允许用户通过命令行交互方式实现PostgreSQL数据库管理。此外,它也允许执行shell脚本程序实现批量命令自动化处理。该工具的运行界面如图1-14所示。

图1-14 psql工具的运行界面

系统管理员使用psql命令行工具执行不同操作命令,便可完成所有数据库管理工作,但前提是必须熟悉操作命令及其参数格式。

2.pgAdmin图形界面管理工具

pgAdmin是一个广泛使用的PostgreSQL数据库图形界面管理工具,该工具可运行在多种操作系统平台上,如Windows、Linux、FreeBSD、macOS和Solaris等。pgAdmin软件是与PostgreSQL数据库软件分开发布的,需要从pgAdmin官网下载。pgAdmin工具支持连接多个PostgreSQL数据库服务器。不论PostgreSQL数据库服务器是什么版本,pgAdmin均可访问与管理。当使用pgAdmin工具登录到PostgreSQL数据库服务器后,系统管理员便可对数据库服务器进行管理,如图1-15所示。

图1-15 pgAdmin工具运行的数据库管理界面

在pgAdmin数据库管理界面中,除了对数据库服务器中的各个数据库进行管理外,还可对数据库服务器的角色与权限、表空间、运行性能等进行管理;另外,也可以进行数据库编程开发,实现数据库存取访问操作。

1.5.4 PostgreSQL数据库对象

在进行PostgreSQL数据库开发时,理解数据库的各类逻辑对象是对开发者的最基础要求。这里介绍几种基本数据库对象。

1.模式

模式(Schema)是一种组织数据库对象的用户目录,它用于组织用户的各类数据库对象,如表、视图、序列、函数、存储过程、触发器等。一个数据库可以有多个模式用户目录对象,其中包括系统默认创建的public目录和用户自己创建的模式目录。当新建一个PostgreSQL数据库时,系统自动默认为其创建一个名为public的模式目录。

2.表

表(Table)是一种存储数据的数据库对象。在PostgreSQL数据库中,表属于某个模式的下级对象,而模式本身又属于某个数据库的下级对象,从而构成了PostgreSQL数据库的3层逻辑结构。在PostgreSQL数据库中,表对象可以有3种类型:关系表、继承表、外部表。关系表是PostgreSQL数据库存储结构化数据的基本单元,继承表、外部表一般用于复杂数据对象或外部文件的存储结构单元,从中可以看出PostgreSQL数据库作为对象-关系数据库与普通关系数据库的不同之处。

3.视图

视图(View)是一种基于虚拟表进行数据操作的数据库对象。与大多数关系数据库一样,PostgreSQL数据库使用视图简化查询逻辑,当然也可使用视图更新基本表中的数据。此外,PostgreSQL数据库还支持物化视图,可通过临时表来实现快速的数据库查询处理。

4.序列

序列(Sequence)是一种为代理键列提供自动增量序列值的数据库对象。与Oracle数据库一样,PostgreSQL数据库也可创建序列对象。用户可以自定义序列的初始值、增量值及序列值域范围。此外,PostgreSQL数据库还支持多个表共享使用相同序列对象。

5.函数

函数(Function)是一种使用DBMS内置编程语言实现函数功能程序的数据库对象。PostgreSQL数据库函数执行结果可以是一个标量值,也可以是查询结果元组集。在PostgreSQL数据库中,可以使用系统内置函数,也可使用自定义函数。

6.存储过程

存储过程(Procedure)是一种类似于函数的数据库对象。它与函数的区别在于存储过程不返回值,因此没有返回类型声明。函数可以作为一个查询或者DML(Data Manipulation Language,数据操纵语言)命令的一部分被调用执行,但存储过程需要明确地使用CALL语句调用执行。数据库系统通常使用存储过程的程序来实现数据处理功能。

7.触发器

触发器(Trigger)是一种事件触发存储过程程序自动执行的数据库对象。PostgreSQL数据库与其他关系数据库一样,均支持多种类型触发器,如插入触发器、修改触发器、删除触发器,同时还可设置触发级别(语句级、行级),以及触发时机(修改前触发、修改后触发)。数据库系统通常使用触发器程序来实现业务规则的数据处理功能。

课堂讨论:本节重点与难点知识问题

1)客户端程序如何编程访问PostgreSQL数据库?

2)如何使用配置文件控制PostgreSQL数据库服务实例的基本行为?

3)PostgreSQL数据库软件的客户端程序有哪些?

4)PostgreSQL数据库软件的服务器端程序有哪些?

5)PostgreSQL数据库管理工具主要有哪些?

6)PostgreSQL数据库中可以创建哪些数据库对象? W8+g+BqNCzuVpZf3NpPhgbA/QJr/Z0ft6ztTaSkrVRL3BF/aroeVibnBV7pKwzDL

点击中间区域
呼出菜单
上一章
目录
下一章
×