PostgreSQL体系架构介绍

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PostgreSQL体系架构介绍

PostgreSQL是最像Oracle的开源数据库,我们可以拿Oracle来比较学习它的体系结构,比较容易理解。PostgreSQL的主要结构如下:
在这里插入图片描述

1.存储结构

PG数据存储结构分为:逻辑存储结构和物理存储存储。其中:逻辑存储结构是内部的组织和管理数据的方式;物理存储结构是操作系统中组织和管理数据的方式。

1.1逻辑存储结构

数据库集簇是数据库对象的集合。

  在关系数据库理论中,数据库对象是用于存储或引用数据的数据结构。

  表就是一个例子,还有索引、序列、视图、函数等这些对象。

  在PostgreSQL中,数据库本身也是数据库对象,并且在逻辑上彼此分离。

  除数据库之外的其他数据库对象(例如表、索引等)都属于它们各自的数据库,虽然它们隶属于同一个数据库集簇,但也无法直接从集簇中的一个数据库访问集簇中的另一个数据库对象。

  数据库本身也是数据库对象,一个数据库集簇可以包含多个Database、多个User、每个Database以及Database中的所有对象都有它们的所有者:User。

在这里插入图片描述

  • 创建一个Database时,会为这个Database创建一个名为public的默认Schema,每个Database可以有多个Schema。
  • 在这个数据库中创建其他数据库对象时,如果没有指定Schema,都会在public这个Schema中。
  • Schema可以理解为一个数据库中的命名空间,在数据库中创建的所有对象都在Schema中创建。
  • 一个用户可以从同一个客户端连接中访问不同的Schema。
  • 不同的Schema中可以有多个相同的名称的Table、Index、View、Sequence、Function等数据库对象。

1.2物理存储结构

数据库的文件默认保存在initdb时创建的数据目录中。
在数据目录中有很多类型、功能不同的目录和文件。
除了数据文件之外,还有参数文件、控制文件、数据库运行日志及预写日志等。

1.2.1数据目录

数据目录用来存放PostgreSQL持久化数据,通常可以将数据目录路径配置为PGDATA环境变量。
PGDATA="/var/lib/postgresql/data"

在这里插入图片描述
而PostgreSQL的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、redo日志(WAL)

1.2.2数据文件(表文件)

 先了解两个基础的数据库对象:OID和表空间。

OID

PostgreSQL中的所有数据库对象都由各自的对象标识符(OID)进行内部管理。
它们是无符号的4字节整型数。
数据库对象和各个OID之间的关系存储在适当的系统目录中,具体取决于对象的类型。
数据库的OID存储在pg_database系统表中,可以通过下面代码查询。

select oid, datname from pg_database where datname = '';

数据库中的表、索引、序列等对象的OID存储在pg_class系统表中,可以通过如下代码获取这些对象的oid

select oid, relname, relkind from pg_class where relname ~ 'tb1';

表空间

在PostgresSql中最大的逻辑存储单位是表空间。
数据库中创建的对象都保存在表空间中,如表、索引和整个数据库都可以被分配到特定的表空间中。
在创建数据库对象时,可以指定数据库对象的表空间,如果不指定则使用默认表空间也就是数据库对象的文件的位置。

初始化数据库目录时,会自动创建pg_default和pg_global表空间。

1.2.3 日志文件

logging_collector = on
log_destination = 'csvlog'
log_directory = '/home/postgres/pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_connections = on
log_disconnections = on
log_rotation_age = 1d
log_rotation_size = 20MB

# 记录用户登陆数据库后的各种操作,postgres日志里分成了3类,通过参数pg_statement来控制,
# 默认的pg_statement参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、
# mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。

log_statement = 'all'                   # none, ddl, mod, all

效果如下

[root@k8slys01 pgsmaster]# tail -f log/postgresql-2021-12-09_121245.csv
2021-12-09 12:20:06.077 UTC [47] LOG:  statement: select pg_switch_wal()
2021-12-09 12:20:06.158 UTC [47] LOG:  statement: select oid, datname from pg_database
2021-12-09 12:20:06.161 UTC [38] LOG:  statement: SELECT c.conkey FROM pg_constraint c WHERE c.contype = 'p' and c.conrelid = 1262
2021-12-09 12:20:06.167 UTC [47] LOG:  statement: SELECT * from pg_class
2021-12-09 12:20:06.182 UTC [38] LOG:  statement: SELECT c.conkey FROM pg_constraint c WHERE c.contype = 'p' and c.conrelid = 1259
2021-12-09 12:20:06.184 UTC [47] LOG:  statement: select pg_current_wal_lsn(),
        pg_walfile_name(pg_current_wal_lsn()),
        pg_walfile_name_offset(pg_current_wal_lsn())
2021-12-09 12:21:06.397 UTC [38] LOG:  statement: INSERT INTO "public"."tb_user"("name") VALUES ('33333') RETURNING *
2021-12-09 12:21:06.405 UTC [38] LOG:  statement: SELECT * FROM "public"."tb_user" WHERE "name" = '33333'

更复杂的以后独立写作

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
弹性计算 关系型数据库 数据库
搭建PostgreSQL主从架构
PostgreSQL是一个关系型数据库管理系统(RDBMS),支持NoSQL数据类型(JSON/XML/hstore)。本教程介绍如何在两台CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构。
|
2月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
3月前
|
运维 监控 关系型数据库
【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
|
存储 关系型数据库 数据库
深入理解 PostgreSQL 的架构和内部工作原理
深入理解 PostgreSQL 的架构和内部工作原理
617 0
|
SQL XML 弹性计算
【ECS生长万物之开源】搭建PostgreSQL主从架构
PostgreSQL被业界誉为最先进的开源数据库,支持NoSQL数据类型(JSON/XML/hstore)。本文档介绍在CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构的操作步骤。
|
存储 SQL 负载均衡
【数据库架构】PostgreSQL的最佳群集高可用性方案
【数据库架构】PostgreSQL的最佳群集高可用性方案
|
SQL 缓存 关系型数据库
【PostgreSQL 架构】PostgreSQL 11和即时编译查询
【PostgreSQL 架构】PostgreSQL 11和即时编译查询
|
SQL 存储 NoSQL
【PostgreSQL架构】为什么关系型数据库是分布式数据库的未来
【PostgreSQL架构】为什么关系型数据库是分布式数据库的未来
|
存储 SQL 负载均衡
【PostgreSQL架构】PostgreSQL的最佳群集高可用性方案
【PostgreSQL架构】PostgreSQL的最佳群集高可用性方案
|
SQL 关系型数据库 MySQL
「数据架构」数据迁移神器 pgloader,迁移各种数据到PostgreSQL
「数据架构」数据迁移神器 pgloader,迁移各种数据到PostgreSQL