• PostgreSQL数据库结构


    PG数据存储结构分为:逻辑结构物理存储

    一、逻辑存储结构是:内部的组织和管理数据的方式【逻辑存储结构适用于不同的操作系统和硬件平台】

    二、物理存储结构是操作系统中组织和管理数据的方式

    1、逻辑存储结构

    二、OID [object identifiers]对象标识符   int占4个字节

    所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。

    2.1、数据库集群-Database cluster

    2.2、数据库-Database

    2.3、表空间-tablespace

    数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。

    新创建的数据库默认创建下面的表空间:

    1)Catalog表空间 存放系统表信息;
    2)System表空间 存放用户数据;
    3)Temp表空间;

    4、模式-Schema

    自动创建的系统模式如下:

    1)PG_CATALOG2)PG_LARGEOBJECT3)PG_TOAST4)PG_PARTITION

    默认的用户模式PUBLIC。

    5、段-segment

    6、区-extent

    7、块-block

    8、数据库对象-Database object

      1)模式对象表、索引、序列、大对象、视图、
                函数【通过函数,可以在数据库服务器端执行指令程序】
                存储过程、
              【数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据】
            、触发器、包 … …
      2)非模式对象用户、数据库

    9、数据表-Table

    10、索引-Index

    11、序列-Sequence

    12、视图-View

    2、物理存储结构

    在执行initdb的时候会初始化一个目录,通常我们都会在系统配置相关的环境变量$PGDATA来表示,

    初始化完成后,会再这个目录生成相关的子目录以及一些文件。

    在postgresql中,tablespace的概念并不同于其他关系型数据库,这里一个tablespace对应的都是一个目录。如下图就是PG的物理结构:

    1、存储系统主要包括三个部分:

    内存中:buffer,MemoryContext;

    数据文件,临时文件;

    日志文件,日志缓存。

    文件和目录相关作用描述

    filesdescription
    PG_VERSION 包含 postgresql 主版本号的文件
    pg_hba.conf 控制 postgresql 客户端验证的文件
    pg_ident.conf 控制 postgresql 用户名映射的文件<br/>配置操作系统用户和数据库服务器上的用户名的映射
    postgresql.conf 配置参数文件
    postgresql.auto.conf 用于存储在 ALTER SYSTEM(版本9.4或更高版本)中设置的配置参数的文件
    postmaster.opts 记录服务器最后一次启动时使用的命令行参数
    postmaster.pid 伴随数据库服务器一同启动,记录数据库服务器进程编号、PGDATA、端口等信息的文件
    subdirectoriesdescription
    base/ 包含每个数据库子目录的子目录
    global/ 包含群集范围的表的子目录,例如 pg_database、pg_control
    pg_commit_ts/ (Version 9.5 or later) 包含事务提交时间戳数据的子目录。
    pg_clog/ (Version 9.6 or earlier) | pg_xact/ (Version 10 or later) 包含事务提交状态数据的子目录。
    pg_dynshmem/ (Version 9.4 or later) 包含动态共享内存子系统使用的文件的子目录。
    pg_logical/ (Version 9.4 or later) 包含逻辑复制的状态数据的子目录。
    pg_multixact/ 包含多事务状态数据的子目录(用于 shared row locks)
    pg_notify/ 包含 LISTEN / NOTIFY 状态数据的子目录
    pg_repslot/ (Version 9.4 or later) 包含复制槽数据的子目录
    pg_serial/ (Version 9.1 or later) 包含已提交的可序列化事务信息的子目录
    pg_snapshots/ (Version 9.2 or later) 包含导出的快照的子目录。 PostgreSQL 的 函数 pg_export_snapshot 在此子目录中创建快照信息文件
    pg_stat/ 包含用于统计子系统永久文件的子目录
    pg_stat_tmp/ 包含用于统计子系统临时文件的子目录
    pg_subtrans/ 包含子事物状态数据的子目录
    pg_tblspc/ 包含指向表空间的符号链接的子目录
    pg_twophase/ 包含 prepare 事务状态文件的子目录
    pg_xlog/ (Version 9.6 or earlier)  | pg_wal/ (Version 10 or later)

    包含预写日志



    3、逻辑与物理存储关系

    1、逻辑关系存在表空间;

    2、表空间存在对应的数据文件中;

    新创建的数据库对应的数据文件的名称:

    Catalog表空间 – databasename.dbfSystem表空间 – Udatabasename.dbfTemp表空间-- Tdatabasename.dbf
    • 前面加 “U” 前缀代表用户数据表空间,用于保存用户表的数据。
    • 不带 U 代表 是系统表的表空间,用于保存系统表的数据。
    • U 前缀的数据文件代表的表空间名为PG。
    • 不带U 的数据文件代表的表空间为 CATALOG。

    4、PGSQL里面的数据类型

    3,PostgreSQL 存储引擎 Heap 具体特性

    PostgreSQL 的存储引擎 Heap 和 MySQL 的 InnoDB 都完全遵循ACID,使用的是行级锁。

    4,围绕 JSON/JSONB 的全文检索功能以及 12.x 中的 JSON/JSONB Path

    JSON 和 JSONB 的区别在于:

    (1) JSON 类型以 JSON 格式存储文本数据,在查询的时候需要先做内容解析,然后进行查询。所以写入快、查询慢。

    (2)JSONB 类型以 JSON 格式的二进制形式存储数据,在插入的时候需要做文本解析,查询的时候并不需要做解析,因此写入慢,查询快。

    而对 JSON/JSONB 涉及到内容包括,下面的内容对对一条数据的一个简单例子:建表、新建数据、查询、模糊查询、数据更新。

     

    本文转载与:http://www.360doc.com/content/21/0325/22/74432652_968889688.shtml

                             https://zhuanlan.zhihu.com/p/108909378

    心有猛虎,细嗅蔷薇
  • 相关阅读:
    CH1301 邻值查找【set应用】
    poj1185 炮兵阵地【状压DP】
    codeforces#516 Div2---ABCD
    2017ACM-ICPC沈阳区域赛
    poj2411 Mondriaan's Dream【状压DP】
    hdu2196 Computer【树形DP】【换根法】
    poj3345 Bribing FIPA【树形DP】【背包】
    poj1463 Strategic game【树形DP】
    poj1191 棋盘分割【区间DP】【记忆化搜索】
    CH5E09 能量相连【区间DP】
  • 原文地址:https://www.cnblogs.com/1314520xh/p/14584595.html
Copyright © 2020-2023  润新知