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
數據庫在邏輯上分成多個存儲單元,稱作表空間。表空間用作把邏輯上相關的結構放在一起。數據庫邏輯上是由一個或多個表空間組成。
新創建的數據庫默認創建下面的表空間:
4、模式-Schema
自動創建的系統模式如下:
1)PG_CATALOG2)PG_LARGEOBJECT3)PG_TOAST4)PG_PARTITION
默認的用戶模式PUBLIC。
5、段-segment
6、區-extent
7、塊-block
8、數據庫對象-Database object
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
