首页 > 数据库技术 > 详细

windows下源码安装调试postgresql

时间:2017-11-13 23:48:55      阅读:533      评论:0      收藏:0      [点我收藏+]

环境: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时所使用的函数。

windows下源码安装调试postgresql

原文:http://www.cnblogs.com/baisha/p/7829028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!