由于之前编译过,想着再来一次应该很容易没想到。。。。
好啦 ,为了下次不犯错,记录一下吧
首先要装vc2013和MinGW
然后确认电脑已经安装好perl、diff、flex、bison,可以在目录C:\MinGW\msys\1.0\bin里面确认是否有相关执行文件,并把这个目录加到path里。
再将C:\Program Files (x86)\MSBuild\12.0\Bin加入到path(这块我迷惑,电脑里有好多版本的MSBuild,在C:\Windows\Microsoft.NET目录里边的其他版本试了几个不行还是报错,最后选了C:\Program Files (x86)\MSBuild\12.0\Bin)
\src\tools\msvc\Mkvcbuild.pm将“my $vsVersion = DetermineVisualStudioVersion();”修改为“my $vsVersion = ‘12.00‘;”,如下图所示:
用vs打开文件“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源码:(一定要通过vc的
命令行)
然后执行“cd src\tools\msvc”切换到pg源码路径,执行命令“perl build.pl DEBUG”此处为方便调试使用DEBUG模式,编译时间会比在linux下要长,编译完成后,如下:
编译完成后,可以执行“perl vcregress.pl check”跑一下回归测试,结果如下:
确认无误后,执行“perl install.pl D:\pgdata\pgdb”进行安装,安装结果如下:
然后进入到pg安装目录“cd /d D:\pgdata\pgdb”进行建库操作“initdb.exe -D ../data”,建库完成后,启动pg数据库“pg_ctl.exe -D ../data -l logfile start”,启动完成后即可进入数据库“psql -d postgres”
如果需要使用vs调试pg,先将pg代码使用vs打开,打开方式,找到编译后的文件夹打开文件“pgsql.sln即出现以下提示,因使用vs2013的编译器编译,不对项目进行重定向,选项如下:
确定后,即可使用vs打开pg源码。然后确定当前打开pg的进程ID:
确定后,即可使用vs打开pg源码。然后确定当前打开pg的进程ID:
点击附加,即可附加到进程。
尝试调试
此时pg在等待输入,通过堆栈信息可以看出是等待网络消息的状态,最终停止在函数“WaitForMultipleObjects”
使用断调试,例如在pg错误入口函数下断点,
如下
然后执行错误的SQL语句:
数据库中并不存在表aaaa,此时vs状态如下:
以上堆栈信息即为pg执行错误SQL时所使用的函数。