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;

數據文件,臨時文件;

日志文件,日志緩存。

文件和目錄相關作用描述

files description
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、端口等信息的文件
subdirectories description
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM