• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

XiaoXiaoli

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

pg_体系结构_逻辑和物理存储结构

PostgreSQL数据库是由一系列位于文件系统上的物理文件组成。

在数据库运行过程中,通过整套高效严谨的逻辑管理这些物理文件。

通常将这些物理文件称为“数据库”,将这些物理文件、管理这些物理文件的进程、进程的管理内存称为这个数据库的“实例”。

 

逻辑和物理存储结构

 在PostgreSQL中,有一个数据库集簇(Database Cluster)的概念,也有翻译成数据库集群。

它是指由单个PostgreSQL服务器实例管理的数据库集合。

组成数据库集簇的这些数据库使用相同的全局配置文件和监听端口、共用进程和内存结构。

并不是指“一组数据库服务器构成的集群”。

在PostgreSQL中说的某一数据库实例通常是指某个数据库集簇。

 

逻辑存储结构

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

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

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

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

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

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

   

 

  创建一个Database时,会为这个Database创建一个名为public的默认Schema,每个Database可以有多个Schema。

  在这个数据库中创建其他数据库对象时,如果没有指定Schema,都会在public这个Schema中。

  Schema可以理解为一个数据库中的命名空间,在数据库中创建的所有对象都在Schema中创建。

  一个用户可以从同一个客户端连接中访问不同的Schema。

  不同的Schema中可以有多个相同的名称的Table、Index、View、Sequence、Function等数据库对象。

 

 

物理存储结构

  数据库的文件默认保存在initdb时创建的数据目录中。

  在数据目录中有很多类型、功能不同的目录和文件。

  除了数据文件之外,还有参数文件、控制文件、数据库运行日志及预写日志等。

 

  数据目录

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

    查看数据目录有哪些子目录和文件的命令如下

    

tree -L 1 -d /usr/local/pgsql/data
/usr/local/pgsql/data
├── base
├── global
├── pg_commit_ts
├── pg_dynshmem
├── pg_logical
├── pg_multixact
├── pg_notify
├── pg_replslot
├── pg_serial
├── pg_snapshots
├── pg_stat
├── pg_stat_tmp
├── pg_subtrans
├── pg_tblspc
├── pg_twophase
├── pg_wal
└── pg_xact

 下面表对子目录和文件进行说明:

  

 

 

  数据文件布局

    数据目录中的子目录base目录是我们的数据文件默认保存的位置。

    base目录是数据库初始化后的默认表空间。

    先了解两个基础的数据库对象: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表空间。

postgres=# \db
       List of tablespaces
    Name    |  Owner   | Location 
------------+----------+----------
 pg_default | postgres | 
 pg_global  | postgres |

        

 

 

 

 

 

 

        

 

posted on 2021-08-07 16:06  XiaoXiaoli  阅读(283)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3