1.
下載PostgreSQL的源代碼。解壓。
2.
在Windows平台下編譯需要跳過一個權限的檢測,否則在編譯的時候可能會出現錯誤。
在\src\backend\main\main.c文件中將 check_root(progname); 注釋掉。
3.
在\src\tools\msvc\Mkvcbuild.pm文件中將 my $vsVersion = DetermineVisualStudioVersion(); 改為 my $vsVersion = '12.00'; 否則build時會報錯不能確定版本。
4.
打開Visual Studio自帶的“開發人員命令提示”。(路徑:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts)
切換到源代碼目錄的\src\tools\msvc。輸入命令build(若要編譯debug版,則輸入build debug)。
將會自動編譯,編譯需要一定的時間,稍微等一下。編譯結果是0 Error(s)即可。
編譯后會在PostgreSQL源代碼目錄下生成大量文件,找到pgsql.sln文件,雙擊即可運行Visual Studio並加載該解決方案。
如果用普通的cmd進行編譯,會報錯“cl command not found at src/tools/msvc/Solution.pm line 80.”。
5. 安裝
用Win+R打開cmd窗口,切換到\src\tools\msvc文件夾,執行命令“install 目標目錄”,“目標目錄”是數據庫將要安裝的地址,用戶自行選定。
例:D:\postgresql-9.6.0\src\tools\msvc>install E:\pg_install

運行該命令后會提示Installation complete。這時已用編譯好的PostgreSQL安裝成功,在目標目錄中將會出現如下目錄:

6. 初始化
切換到目標目錄的bin文件夾下,執行命令“initdb 數據庫目錄”。
例:

初始化后如下圖所示:

7. 啟動服務器
“E:\pg_install\bin>postgres -D E:\pg_data”
或
“E:\pg_install\bin>pg_ctl -D E:\pg_data -l logfile start”
8.
為了能夠調試安裝好PostgreSQL,需要在VS中配置一下,右鍵postgres工程,點擊屬性,如下圖所示:

配置屬性 -> 調試:
其中,命令(Command):要綁定PostgreSQL的postgres.exe。命令參數(Command Arguments):-D 數據庫目錄(注意D要大寫,否則有時候可能會報錯)。工作目錄(Working Directory):數據庫目錄。

9. 創建數據庫
切換到數據庫目錄的bin文件夾下,並執行命令“E:\pg_install\bin>createdb mydb”。
這時打開VS,找到菜單欄中“工具 -> 附加到進程”選項。看到現在應該是有6個postgres.exe的進程,注意記錄一下這六個進程的ID。
執行命令“psql 剛剛創建的數據庫名稱(mydb)”,則進入剛剛創建的數據庫中。
這時再看VS的“附加到進程”中應該有7個postgres.exe的進程和一個psql.exe的進程。
然后attach之前沒有出現過的postgres.exe進程(通常為第一個)。
10. 添加斷點
在postgres工程的postgres.c文件中搜索“simple”,找到一個switch語句。因為postgres.c是psql命令的入口地方,所以在這里加斷點之后,在客戶端執行命令操作的時候就會被VS捕捉到,就可以追代碼了。
例:在psql中輸入“\d”。執行后會調到VS中設斷點的位置。
------------------------------------------------------------以上是師姐總結部分-----------------------------------------------------------
如何調試程序:
第一步:
啟動數據庫服務器:右擊postgres-》設置為啟動項。

第二步:
在工具欄中點擊"本地windows調試器"

此時啟動數據庫的服務器端。如下圖:

第三步:在cmd中,啟動客戶端。
psql mydb (mydb是自己建的數據庫的名字)。
如下圖:

第四步:此時,客戶端和服務器端已經建立了連接。打開VS,找到菜單欄中“工具 -> 附加到進程”選項。VS的“附加到進程”中應該有7個postgres.exe的進程和一個psql.exe的進程。
然后attach之前沒有出現過的postgres.exe進程(通常為第一個)。
第五步:在源程序中設置斷點。
第六步:在客戶端命令行,寫sql語句,回車即可。
假如想要停止調試過程,而不是關閉這個客戶端-服務器這個連接的話,點擊工具欄中的 綠色的"繼續". 不是點擊那個紅色的停止調試。
安裝遇到的問題:
在build源碼的時候,一定要輸入build命令,build過程卡在了某一步,因此我放棄了該命令,使用了build debug。
然后接着使用install命令安裝數據庫之后生成的bin目錄下,居然沒有任何東西。
因此,再接着initdb 初始化數據庫時,顯示initdb 不是內部或者外部命令。
注意:
1.首先,install 命令之后,出現的bin目錄下是會存在一系列exe程序的。initdb.exe是其中的一個程序。
解決方法:
使用build命令,而不是使用build debug命令。當遇到build過程卡住時,使用鍵盤上的上箭頭,重新執行上次的build命令,居然可以成功了。
執行install 命令之后,bin目錄下出現了一系列的exe程序。
修改源程序之后,如何重新安裝?
A:打開Visual Studio自帶的“開發人員命令提示”。切換到源代碼目錄的\src\tools\msvc。輸入命令build debug。
B:關閉之前打開的進程:
關閉客戶端:使用命令 :\q
關閉服務器端:在vs中點擊“關閉調試即可”。
B:打開cmd窗口,切換到\src\tools\msvc文件夾,執行命令“install 目標目錄”。(之前的安裝目錄pg_install可以不刪除,pg_data不用刪除)

C:(因為之前的數據都還在pg_data中。因此不需要重新初始化。)
D:重新執行調試過程。
注意:
1.不可以直接在vs中重新生成解決方案。必須要重新build ,重新安裝。
2.在重新安裝的過程中:
退出客戶端:使用命令 \q .
退出服務器端:在cmd把之前打開的數據庫服務進程關閉,退出cmd.
否則,在install的過程會報錯如下:

