了解 PostgreSQL 体系结构

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 对用户进行身份验证,并创建后端服务器进程来处理连接。 客户端仅在提交查询和接收查询结果时与服务器进程交互。

参见:

了解 PostgreSQL 体系结构 - Training | Microsoft Learn

相关推荐
CoderIsArt30 分钟前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧3 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis4 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享5 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil275 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk6 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境6 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n6 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼7 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库
生命几十年3万天7 小时前
redis时间优化
数据库·redis·缓存