windows下源碼安裝調試postgresql


環境:windows 10

postgresql版本:postgresql-9.6.5

使用工具:vs2017社區版

輔助工具:perldiffflexbison

 

相關工具下載地址:

perl下載鏈接:http://pan.baidu.com/s/1i5aPilB 密碼:k6f0

diffflexbison下載鏈接:http://pan.baidu.com/s/1hrHotes 密碼:4ku6

以上工具均為綠色版,解壓后,設置環境變量即可

 

此處使用的編譯調試工具為vs2017社區版,該版本為免費版,個人使用不存在版權困擾。

首先離線下載vs2017社區版,也可在線安裝,安裝方式如下:

微軟官方下載官方提供的下載工具:vs_community.exe 

cmd中執行以下命令,zh-CN表示中文,en-US表示英文,E:\vs2017表示下載位置:

vs_community.exe --layout E:\vs2017 offline --lang zh-CN

安裝vs2017,選擇如下內容安裝即可:

修改postgresql配置文件,否則編譯過程會出現錯誤。修改內容如下:

E:\PG\postgresql_9.6.5\src\tools\msvc\VSObjectFactory.pm中,將“if ($major > 14)”修改為“if ($major > 15)”,如下所示:

E:\PG\postgresql_9.6.5\src\tools\msvc\Mkvcbuild.pm將“my $vsVersion = DetermineVisualStudioVersion();”修改為“my $vsVersion = '14.00';”,如下圖所示:

以上兩步解決pgperl腳本中不識別vs2017版本的問題,報錯信息為“Unable to determine Visual Studio version: The nmake version could not be determined. at src/tools/msvc/Mkvcbuild.pm line 86.

vs打開文件“E:\PG\postgresql_9.6.5\src\fe_utils\print.c”,執行如下操作:

然后保存替換原來的文件。此處解決的問題:該文件中的換行符使用的是各個操作系統通用的換行符,在windows下編譯會出現警告。報錯信息為“warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

下面編譯postgresql源碼:

然后執行“cd /d E:\PG\postgresql_9.6.5\src\tools\msvc”切換到pg源碼路徑,執行命令“perl build.pl DEBUG”此處為方便調試使用DEBUG模式,編譯時間會比在linux下要長,編譯完成后,如下:

編譯完成后,可以執行“perl vcregress.pl check”跑一下回歸測試,結果如下:

確認無誤后,執行“perl install.pl E:\pg\pgdb”進行安裝,安裝結果如下:

然后進入到pg安裝目錄“cd /d E:\pg\pgdb”進行建庫操作“initdb.exe -D ../data”,建庫完成后,啟動pg數據庫“pg_ctl.exe -D ../data -l logfile start”,啟動完成后即可進入數據庫“psql -d postgres

 

如果需要使用vs調試pg,先將pg代碼使用vs打開,打開方式,找到編譯后的文件夾“E:\PG\postgresql_9.6.5”,打開文件“pgsql.sln”即出現以下提示,因使用vs2015的編譯器編譯,不對項目進行重定向,選項如下:

確定后,即可使用vs打開pg源碼。然后確定當前打開pg的進程ID

點擊附加,即可附加到進程。

嘗試調試

此時pg在等待輸入,通過堆棧信息可以看出是等待網絡消息的狀態,最終停止在函數“WaitForMultipleObjects

 

使用斷點調試,例如在pg錯誤入口函數下斷點,

如下

然后執行錯誤的SQL語句:

數據庫中並不存在表aaaa,此時vs狀態如下:

以上堆棧信息即為pg執行錯誤SQL時所使用的函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM