天天看點

PostgreSQL與MySQL源代碼分析之旅(2)上--PG源代碼結構

PG的源代碼可以從官方網站上下載下傳得到,解壓後得到下面幾個目錄:

  • src : 系統代碼
  • configure:編譯腳本代碼,PG使用的是autoconfig方式編譯
  • doc:幫助文檔代碼,用sgml代碼編寫
  • contrib:目錄中包含了一些不屬于核心系統的外圍工具和一些實驗性質的開發嘗試。

 下面展開src進行進一步的分析:

└─src

    ├─backend :系統核心代碼

    │  ├─acces             :資料存取層代碼,包括堆、各種索引、事務管理

    │  ├─bootstrap       :資料庫bootstrap模式的代碼,該模式主要用來初始化模闆資料庫

    │  ├─catalog       :系統表 

    │  ├─commands         :DML之外的一些指令

    │  ├─executor     :執行器

    │  ├─foreign      :外部表

    │  ├─lib

    │  ├─libpq        :libpq接口,資料庫通路的c、c++接口

    │  ├─main        :各個服務程序的main函數入口

    │  ├─nodes      :文法樹、計劃數節點

    │  ├─optimizer     :優化器

    │  ├─parser       :詞法和文法解析,将查詢轉換成内部查詢樹

    │  ├─port        : 平台相容處理的相關函數

    │  ├─postmaster         :就是postmaster

    │  ├─regex       :正規表達式實作

    │  ├─replication      :主備雙機

    │  ├─rewrite       :查詢重寫

    │  ├─snowball      :第三方分詞程式

    │  ├─storage :存儲管理

    │  │  ├─buffer    :緩沖區管理

    │  │  ├─file       :檔案句柄管理

    │  │  ├─freespace   :空閑空間管理

    │  │  ├─ipc       :程序間通信

    │  │  ├─large_object  :大對象

    │  │  ├─lmgr      :鎖管理

    │  │  ├─page     :頁面管理

    │  │  └─smgr     :存儲管理

    │  ├─tcop      :Postgres查詢分發,調用Parser、Optimizer、Executor和Commands中的函數來執行查詢

    │  ├─tsearch        :

    │  └─utils       :各種支撐函數

    ├─bin :系統外圍工具

    │  ├─initdb       :資料庫初始化工具

    │  ├─pgevent     :

    │  ├─pg_basebackup  :

    │  ├─pg_config     :

    │  ├─pg_controldata  :

    │  ├─pg_ctl      :資料程序控制工具

    │  ├─pg_dump     :資料導入導出

    │  ├─pg_resetxlog  :

    │  ├─psql       : 資料庫用戶端工具

    │  └─scripts     :

    ├─include      :頭檔案目錄

    ├─interfaces      :外部接口

    ├─makefiles

    ├─pl :各種過程語言

    │  ├─plperl

    │  ├─plpgsql     : 類似于PLSQL的文法

    │  ├─plpython

    │  └─tcl

    ├─port:libpgport庫

    ├─template :編譯腳本模闆

    ├─test : 回歸測試程式

    │  ├─examples

    │  ├─isolation

    │  ├─locale

    │  ├─mb

    │  ├─performance

    │  ├─regress

    │  └─thread

    ├─timezone 

    ├─tools

    └─tutorial

    通過分析代碼目錄結構,可以看出PG目錄組織比較工整,核心代碼、外圍工具代碼、文檔代碼都分門别類的放置于不同的目錄下;各個功能子產品劃厘清晰。提供的功能比較完整,支援SQL語言及多種過程型語言、支援正規表達式、支援全文檢索、支援跨平台編譯。

轉載于:https://www.cnblogs.com/databaseaffair/p/3323305.html