windows下源码安装调试postgresql
作者:瀚⾼PG实验室 (Highgo PG Lab)- 汀上⽩沙
环境:windows 10
postgresql版本:postgresql-9.6.5
使⽤⼯具:vs2017社区版
辅助⼯具:perl、diff、flex、bison
相关⼯具下载地址:
以上⼯具均为绿⾊版,解压后,设置环境变量即可
此处使⽤的编译调试⼯具为vs2017社区版,该版本为免费版,个⼈使⽤不存在版权困扰。
⾸先离线下载vs2017社区版,也可在线安装,安装⽅式如下:
微软官⽅下载官⽅提供的下载⼯具:
cmd中执⾏以下命令,zh-CN表⽰中⽂,en-US表⽰英⽂,E:\vs2017表⽰下载位置:
--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';”,如下图所⽰:
以上两步解决pg的perl脚本中不识别vs2017版本的问题,报错信息为“Unable to determine Visual Studio version: The nmake version could not be determined. at src/tools/msvc/Mkvcbuild.pm line 86.”
unicode在线工具⽤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”进⾏建库操作“ -D ../data”,建库完成后,启动pg数据库“ -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错误⼊⼝函数下断点,
如下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。