# postgresql7.4.1初始化數(shù)據(jù)庫
標簽(空格分隔): postgresql, postgersql7.4.1源碼閱讀
---
第一篇文章期揪,為什么要閱讀7.4版本的源碼呢?當前在postgresql的官網(wǎng)中腿时,能夠找到的最新的源碼的版本就是postgres95娘赴,這是postgres在1995年發(fā)布的第一個開源版本,理論上也是剛開始接觸postgersql源碼的朋友來說是最簡單的入門版本鹿寨,如果我們要研究linux內(nèi)核的源碼庐氮,我們可以有這樣的閱讀思路和軌跡瞧柔,但是數(shù)據(jù)庫的源碼相對代碼量較多漆弄,且postgres95之前的版本都是學(xué)院派的編碼,發(fā)布到互聯(lián)網(wǎng)之后非剃,由世界上眾多的編碼高手進行修改置逻,代碼的變化還是非常的大的,無論從數(shù)據(jù)結(jié)構(gòu)設(shè)計备绽,代碼規(guī)范券坞,到產(chǎn)品人性化程度都有了一個質(zhì)的飛躍。所以即便是閱讀了postgres95的源碼肺素,也未必就能夠很容易的閱讀最新的版本恨锚。版本6系列基本上還是一個醞釀期,基本數(shù)據(jù)結(jié)構(gòu)沒有改變倍靡,只是做了一些更加人性化的產(chǎn)品體驗上的改變猴伶。但是到了版本7,絕大部分的代碼都已經(jīng)經(jīng)過了重構(gòu)塌西,并且已經(jīng)非常的接近于當前最新版本他挎,閱讀此版本的代碼應(yīng)該是最合適的。選擇小版本7.4.1也是因為他是大版本7中最穩(wěn)定使用的一個捡需。另外一個不建議閱讀更早期版本的重要原因是办桨,早期版本編寫時間過早,在現(xiàn)代的linux平臺上面不能方便的編譯通過(編譯器和系統(tǒng)頭文件已經(jīng)發(fā)生了很大的改變)站辉,這給編譯和調(diào)試實際上帶來了很多的麻煩∧刈玻現(xiàn)在最新版本的postgresql已經(jīng)是9.6版本,里面已經(jīng)涉及到了很多的功能饰剥,比如更復(fù)雜的數(shù)據(jù)庫之間的流復(fù)制機制殊霞,分布式系統(tǒng)等等,這些功能已經(jīng)嚴重的加大了數(shù)據(jù)庫本身的復(fù)雜性汰蓉。對于一個初學(xué)者而言绷蹲,這些內(nèi)容都不是必須要先掌握的,但是卻非常影響基本功能代碼的閱讀古沥。所以最終選擇了7.4.1版本源碼作為初次的源碼分析瘸右。對于最新版本娇跟,會另外編寫文章來分析岩齿。
postgresql在版本7開始已經(jīng)開始逐漸脫離原始的配置方式(早期的版本都是在編譯階段太颤,在配置文件中指定的數(shù)據(jù)庫數(shù)據(jù)文件的安裝目錄,也就是說如果你需要更改這些目錄盹沈,就意味著要重新編譯一遍整個源碼才行龄章,切同一份編譯出來的源碼是不能運行兩個不同數(shù)據(jù)庫目錄的實例的),使用initdb命令的-D參數(shù)就可以指定乞封。
安裝目錄下的bin目錄中有initdb文件就是用于做數(shù)據(jù)初始化的命令做裙,此腳本支持多個參數(shù)選項,但是最重要的就是-D選項肃晚,本文也只是針對此選項進行分析锚贱,此選項是初始化命令的一個必選選項,用于指定一個將要初始化的數(shù)據(jù)庫實例的路徑关串,數(shù)據(jù)庫實例的概念并不是說指我們在用sql語句中的用到的庫的名稱拧廊,這里的實例是指,運行一個數(shù)據(jù)庫服務(wù)晋修,通常涉及到一個進程簇和一個對外服務(wù)的端口吧碾。每一個數(shù)據(jù)庫服務(wù)實例,會管理一個指定的數(shù)據(jù)庫數(shù)據(jù)文件目錄墓卦,這個目錄就是上面說的使用-D參數(shù)來初始化的目錄倦春。
``
initdb -D /home/denny/instance/data/
// 在/home/denny/instance/data目錄下創(chuàng)建數(shù)據(jù)庫初始文件
``