了解 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

相关推荐
做梦敲代码15 分钟前
达梦数据库-读写分离集群部署
数据库·达梦数据库
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger1 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud1 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷1 小时前
Redis
数据库·redis·缓存
仰望大佬0072 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名2 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库
一只路过的猫咪2 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb