PostgreSQL 是客户端/服务器关系数据库管理系统 (RDMS)。 PostgreSQL 还支持各种扩展插件,例如 Azure Database for PostgreSQL 超大规模 Citus 选项中的 Citus 扩展插件。 将扩展插件加载到数据库中后,它将像任何内置功能一样正常运行。
PostgreSQL 也有自己的查询语言,称为 pgsql。 此外,PostgreSQL 还支持过程语言,如 Ruby on Rails。
客户端/服务器体系结构
PostgreSQL 基于客户端/服务器体系结构。 该服务器存储、管理数据并将数据返回到客户端程序。 客户端程序使用 pgSQL 或 PostgreSQL 支持的过程语言之一(例如 PL/pgSQL)请求数据。
一个 PostgreSQL 会话由三部分组成:
- Postmaster
- 客户端应用程序
- 服务器
Postmaster
Postmaster 是管理 PostgreSQL 服务器的监督守护程序过程。 Postmaster 守护程序管理各种服务器进程之间的通信,包括初始化服务器、关闭服务器、处理连接请求和执行其他后台进程。 在 Azure Database for PostgreSQL 中,你无权访问文件系统或 Postmaster 进程。
客户端应用程序
客户端运行查询并与 Azure Database for PostgreSQL 服务器上的数据库进行交互。 若要运行查询,需要一个客户端工具,例如 Azure Data Studio、DBeaver、pgAdmin 或 psql。 你将在下一个模块中了解客户端工具。
服务器进程
群集 - 单个 PostgreSQL 服务器可以托管多个用户数据库。 PostgreSQL 将此数据库集合称为群集。 每个数据库相互独立,用户和应用程序与单个数据库进行交互。 用户是在群集或服务器级别创建的。
这些数据库的数据存储在名为 PGDATA 的群集数据目录中。 PGDATA 数据目录包括一个包含正在运行的 PostgreSQL 版本的文件、包含指向表空间的链接的 pg_tblspc 和包含预写日志文件的 pg_xlog。
Azure Databases for PostgreSQL 是一项管理存储和基础文件系统的服务。 作为此服务器的用户,你无权直接访问 PGDATA 目录或其任何子目录。
除了你创建的数据库外,还有三个系统数据库:
- postgres - 默认数据库。 创建服务器后,连接到 postgres 数据库。
- azure_maintenance - 管理服务进程的数据库。 你无权直接访问此数据库。
- azure_sys - 查询存储数据库。 不得修改 azure_sys 数据库或其架构。 更改 azure_sys 中的任何内容都会阻止查询存储和其他性能功能正常运行。
架构 - 架构是数据库对象的命名分组。 具有许多对象的大型数据库受益于将对象组织到架构中。 例如,为销售相关对象创建架构,客户端相关对象的架构将使查找正确的对象更容易。
服务器参数 - PostgreSQL 有多个配置文件,用于确定数据库引擎应如何工作。 主 PostgreSQL 配置文件称为 postgresql.conf。
表空间 - 通过 PostgreSQL 的本地实现,可以使用 pg_tblspc 子目录创建表空间,这些表空间链接到名为 PGDATA 的主存储区域。 Azure Database for PostgreSQL 不支持表空间:所有表都在主存储区域中创建。
系统目录 - PostgreSQL 包含许多用于存储有关数据库对象的信息的系统表和视图。 例如,pg_database 将返回服务器上的所有数据库,pg_class 存储有关表的统计信息。
Azure Database for PostgreSQL 允许访问某些目录,但不允许访问所有系统目录。
扩展插件 - PostgreSQL 支持可扩展数据库引擎核心功能的一系列扩展插件。 这些扩展插件在名为 PostgreSQL Extensions Network (PGXN) 的存储库中提供。
若要使用 PostgreSQL 扩展插件,必须在数据库中安装它。 若要安装扩展插件,请从 psql 工具运行 CREATE EXTENSION 命令,将该扩展插件加载到数据库中。 例如:
SELECT create_extension('postgis');
若要了解 Azure Database for PostgreSQL 支持哪些扩展插件,请运行以下查询:
SELECT * FROM pg_available_extensions;
所有 Azure Database for PostgreSQL 服务器都包含 pg_stat_statements 扩展插件。 已安装此扩展插件,用于跟踪 SQL 语句的执行统计信息。 服务器参数 pg_stat_statements.track 定义该扩展插件计数的语句。 选项包括:
- 顶部 - 跟踪客户端直接发出的所有语句(默认)。
- 无 - 未跟踪任何语句。
- 全部 - 跟踪所有语句,包括嵌套语句和函数调用的语句。
服务器上存在记录每个 SQL 语句的性能开销。 如果没有主动使用 pg_stat_statements,请将此参数设置为"无"。 另请注意,某些第三方监视服务可能依赖于 pg_stat_statements。
查询优化器 - PostgreSQL 使用基于成本的查询优化方法。 分析程序检查查询语法,并将查询分成不同的部分。 分析程序创建一个分析树,并将查询传递给重写器,该重写器将规则应用于查询。 规划器找出在实际执行查询之前执行查询的最佳方式。
后端进程 - PostgreSQL process-per-transaction 模型。 新用户连接时,PostgreSQL 对用户进行身份验证,并创建后端服务器进程来处理连接。 客户端仅在提交查询和接收查询结果时与服务器进程交互。
参见: