dirtyhand-tester [数据库基础] Postgresql 的逻辑结构

simonpatrick · 2022年11月08日 · 4160 次阅读

不仅是测试栏目,没有太多的高大上理念,只有一个话题,如何想办法解决你的问题.
从实践中学习,从实践中练习, 这些是领导不会告诉你的

Postgresql 的逻辑结构

0.缘起

测试环境搭建数据库中介绍了如何进行数据库的复制, 表结构的操作等等.这些内容对于测试而言有一些陌生,我自己同样也是没有那么清晰的概念,因此就借这个机会就在复习一下.
数据库存储有逻辑概念和物理概念,对于测试这样的使用者而言,了解逻辑概念会比物理概念在实际中效果更好,同样物理概念有点难度,需要完全理解需要很多很多时间, 对于测试而言,花 20% 的时间去了解日常操作中有用的东西会更加有实际意义.

Postgresql 的逻辑概念其实没有那么复杂,只需要花个 30 分钟时间了解,可能就超过了一大半的测试同学. 所以这个 30 分钟时间是值得的.

什么是 Postgresql 的逻辑结构,逻辑结构实际上就是日常使用的如下概念:

  1. 数据库实例
  2. 索引
  3. ......

1. Postgresql 逻辑结构

先说一下 postgresql 的架构

上图来自geeksforgeeks,但是其实我也不太懂,所以有想去的可以自己去研究. 下面说说最常用的 postgresql 的逻辑概念, 不说逻辑概念这样的东西,就说 postgresql 里面哪些的我们日常经常使用的呢?

2. 常用的 Postgresql 逻辑概念术语实例化

常用的 postgresql 逻辑概念术语有:

  1. 数据库集群-Database cluster, 它是指有单个 PostgreSQL 服务器实例管理的数据库集合,组成数据库集群的这些数据库使用相同的全局配置文件和监听端口、共用进程和内存结构。一个 DataBase Cluster 可以包括:多个 DataBase、多个 User、以及 Database 中的所有对象
  2. 数据库-Database,在 PostgreSQL 中,数据库本身也是数据库对象,并且在逻辑上彼此分离
  3. 表空间-tablespace, 数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成
  4. 模式-Schema, 当创建一个数据库时,会为其创建一个名为 public 的默认 Schema。Schema 是数据库中的命名空间,在数据库中创建的所有对象都是在 Schema 中创建,一个用户可以从同一个客户端连接中访问不同的 Schema。而不同的 Schema 中可以有多个同名的 Table、Index、View、Sequence、Function 等等数据库对象
  5. 数据库对象-Database object,表、视图、索引、序列、函数等等。在 PostgreSQL 中的所有数据库对象都由各自的对象标识符(OID)进行内部的管理。例如,数据库的 OID 存储在 pg_database 系统表中,可以通过下面的语句进行查询

以上术语还是比较抽象,让我们看看这些在 datagrip 这样的工具里面的展示。

2.1 快速了解 Postgresql 逻辑概念

如果本地使用 Docker 运行一个 postgresql,然后使用 Datagrip 连接数据库之后,会展示为:

通过上年截图就很清楚的说明了这些概念在实际使用过程中位置。
一些几点需要明确:

  1. 一个数据库集群 database cluster 可以有多个 数据库 database
  2. 一个database 可以有多个schema
  3. 一个schema 可以逻辑上独立的包含表,索引等数据库常用的 database object,数据库对象

2.2 加深一些数据库对象的了解

对于数据库对象而言,我们常用的类似表,主键是我们日常经常使用的, 为了加深一些了解,我们再用 datagrip 的一个截图来说明:

以上图为例子:

  1. data_record_info 就是表
  2. columns 操作的就是所有表的字段信息
  3. keys: 保存的是比如: 主键定义,外键定义等
  4. triggers: 保存触发器信息, 具体触发器的信息在后面再介绍
  5. view: 视图
  6. store procedure 存储过程

2.3 数据库对象 - 额外说明

关于表和字段等就不过多介绍了,主要说明一下 Trigger,View,和 Store Procedure,
由于这些在互联网中使用不多,但是在企业应用中可能还是会使用到,所以做一下额外介绍下.

  1. 触发器, 一下是一个触发器的例子,就是在每更新一条数据记录的时候,自动更新 update_at 时间到当前时间
create trigger updated_at  
    before update  
    on demo.stored_procedure_prac  
    for each row  
execute procedure refresh_updated_at();

refresh_update_at 存储过程:

create function refresh_updated_at() returns trigger  
    language plpgsql  
as  
$$  
begin  
    new.updated_at = current_timestamp;  
    return new;  
end  
$$;  

  1. Store Procedure 存储过程

存储过程就是一个函数,而这个函数实际上是部署在数据库服务器上,然后就可以进行数据库特殊逻辑进行计算.

  1. View 视图, 实际上就是自定义的一段 SQL,把 SQL 的结果集用类似于表的方式展示

2.4 使用 postgresql 数据库查看数据库对象

实际上在 postgresql 中,可以通过想过的 SQL 查看所有的数据库对象信息,主要这些信息都保存在
pg_catelog 这个 schema 中

希望以上的介绍可以让你对 postgresql 有更多一些了解.

想要了解更多内容,可以查看公众号合集:

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册