bootstrap - 通過initdb創建最初的數據庫模板
幾乎PostgreSQL的每一個操作都需要存取系統表,那么如何創建這些系統表呢?不能以通常的方式創建這些系統表並向其中插入數據,因為表的創建和插入要求系統表已經存在。這一部分代碼的目的就是使用一種僅僅在bootstrap過程中使用的特殊方法來直接建立系統表
main - 將控制轉到postmaster或postgres
檢查進程名(argv[0])和各種標志, 然后將控制轉到postmaster或postgres
postmaster - 控制postgres服務器啟動/終止
創建共享內存,然后進入一個循環等待連接請求。當一個連接請求到達時,啟動一個postgres后台服務進程,將連接轉給它
libpq - 后台服務器libpq庫函數
處理與客戶進程間的通訊
tcop - 將請求分派到合適的模塊
這是postgres后台服務進程的主要處理部分, 它調用parser, optimizer, executor, 和commands中的函數
parser - 將SQL查詢轉化為查詢樹
將來自libpq的SQL查詢轉換為命令形式的結構供optimizer/executor或commands使用.首先對SQL語句進行詞法分析,轉換為關鍵字,標識符和常量,然后進行語法分析。語法分析生成命令形式的結構來表示查詢的組成。然后這個命令形式的結構被分離、檢查和傳送給commands中的處理函數,或者轉換為結點鏈表供optimizer和executor處理
optimizer - 創建查詢路徑和查詢計划
使用parser的輸出來為executor生成優化了的查詢計划.
optimizer/path - 使用parser的輸出創建查詢路徑
它使用parser的輸出生成所有可能的執行方法,它檢查表的連接順序,where子句限制和optimizer的表統計信息來評估每一個可能的執行方法,並賦予每個方法一個代價
optimizer/geqo - 遺傳算法查詢優化
optimizer/path對所有連接表的方法進行了評估。但是當表的數目變得很大時,檢測測的數目也會變得很大。遺傳算法查詢優化對每一個表進行考慮,然后計算出最優的順序來執行連接。如果只有幾個表,這種方法花費較長的時間,但對於大量的表,這種方法就比較快了。系統有一個選項用於控制何時使用這個功能
optimizer/plan - 優化path輸出
為optimizer/path的輸出選擇代價最小的路徑並創建一個執行計划
optimizer/prep - 處理特殊的查詢計划
對特殊的查詢計划進行處理
optimizer/util - 優化器支持函數
供優化器其他部分使用的函數
executor - 執行來自optimizer的復雜的節點形式的查詢計划
處理select, insert, update,和delete語句. 處理這些語句的操作包括堆掃描、索引掃描、排序、連接表、分組、計算集函數和性處理
commands - 不需要executor執行的命令
執行不需要復雜處理的SQL命令.包括vacuum, copy, alter, create table, create type以及許多其他未能例舉的命令。調用這一部分代碼時使用由parser生成的結構.大多數的函數先做一些處理,然后就調用catalog目錄下的一些低層函數來做實際的工作
catalog - 系統目錄操作
包含用於操作系統表和系統目錄的函數.表、索引、過程、運算符、類型、和集函數的創建和操縱函數在這里可以找到。它們都是低層的函數,通常由上層將用戶請求格式化為預定義格式的函數調用
storage - 管理各種類型的存儲系統
支持服務器以統一的方式存取資源
storage/buffer - 共享緩沖區管理
storage/file - 文件管理
storage/ipc - 信號燈和共享內存
storage/large_object - 大對象
storage/lmgr - 鎖管理器
storage/page - 頁管理器
storage/smgr - 存儲/磁盤管理器
access - 各種存取方法
支持堆, 索引, 和事務對數據的存取
access/common - 公共存取函數
access/gist - 可自定義的存取方法
access/hash - hash
access/heap - 堆用於存取表
access/index - 所有索引類型都使用
access/nbtree - Lehman and Yao的btree管理算法
access/rtree - 用於索引2維數據
access/transam - 事務管理器(BEGIN/ABORT/COMMIT)
nodes - 創建/操縱節點和鏈表
PostgreSQL將SQL查詢存儲到稱為節點的結構中。節點是通用的容器,它包含一個類型字段和一個與類型有關的數據字段.節點通常串成鏈表。
鏈表包含一個元素和一個next指針.節點和鏈表廣泛的用於parser,optimizer,和executor中用於存儲請求和數據
utils - 支持程序
utils/adt - 內建數據類型
包含所有PostgreSQL自帶數據類型
utils/cache - system/relation/function高速緩存
PostgreSQL支持自定義數據類型,因此沒有數據類型是固化在核心當中的。當服務器需要查找一個數據類型時它就到系統表中去找。由於系統表頻繁使用,所以設立一個高速緩存來加速查找。系統中包括一個系統關系cache, 一個函數/運算符cache和一個關系信息cache. 關系信息cache中包含所有最近訪問過的表的信息而不僅僅包含系統表的信息
utils/error - 錯誤報告
向前台報告后台錯誤
utils/fmgr - 函數管理器
處理動態加載函數的調用和在系統表中定義的函數的調用
utils/hash - 內部使用的hash程序
用於cache和內存管理器以便快速查找動態存儲的數據結構
utils/init - 各種初始化
utils/misc - 未歸類的東東
utils/mmgr - 內存管理器(進程私有內存)
PostgreSQL在顯式的內存上下文中分配內存. 上下文可以是語句級、事務級或永久/全局級的.這樣,后台服務器可以很容易地在一個語句或者事務結束的時候釋放內存
utils/sort - 排序
在內存中或者使用磁盤文件排序
utils/time - 事務時間限定
檢查元組是否仍然有效,還是屬於未提交事務或者已被新行替代
include - 包含文件
每個子系統有一個目錄
lib - 支持庫
幾個通用的程序
regex - 正規表達式庫
用於后台服務器的正規表達式處理如'~'.
rewrite - 規則系統
完成規則系統的處理
tioga -