相关文档
https://www.postgresql.org/docs/10/install-windows-full.html 源代码编译(官方文档)
https://blog.csdn.net/u012867993/article/details/102466086 源代码调试
源代码版本
postgresql-9.6.10.tar.gz
编译环境准备
1. 安装VS2017
按照默认配置安装,没有特别之处。
2. ActivePerl安装
按照默认配置安装,选择完全安装。

3. ActiveTcl安装
安装是会检测新版本,直接选择skip,同样也选择完全安装。


4. MinGW安装(可能需要翻墙)
- 安装MinGW工具:按照默认配置安装,没有特别之处

- 安装完成后,点击continue按钮,就会出现下图的界面

勾选“mingw-developer-toolkit-bin”,勾选成功后如下图所示(选择mark for installation后可能要卡一会儿,请耐心等待)
- 勾选完成后,选择Installation->Apply Changes->Apply


5. MIT Kerberos 安装
按照默认配置安装,没有特别之处。
6. OpenSSL 安装
按照默认配置安装,没有特别之处。
7. Python 安装
按照默认配置安装,安装时注意勾选“Add Python 3.8 to PAHT”。

8. 重启
安装完毕后重启计算机。
编译
1.解压PostgreSQL源代码
2.修改VSObjectFactory.pm
-
在“\postgresql-9.6.10\src\tools\msvc”路径下找到VSObjectFactory.pm文件,用记事本或者VS打开。
-
找到DetermineVisualStudioVersion函数的实现,添加如下代码
return '15.00';

注意:如果编译不报错的话,这个步骤其实可以不用做。
3. 利用Perl编译源代码
-
打开cmd
-
利用cd 命令切换到“\postgresql-9.6.10\src\tools\msvc”目录下

- 输入build DEBUG则可以开始编译
4.编译常见问题
-
The nmake command wasn’t found
找不到nmake指令,nmake是VS自带的指令,出现这个错误的原因是环境变量没有配置,找到nmake的位置将其配置到环境变量中即可。我的nmake路径如下:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64 -
msbuild不是内部或外部命令
也是环境变量问题。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin -
缺少SDK 8.1
编译postgresql需要sdk8.1

调试
1. 安装pgsql
-
手动创建pg安装目录d:\pg\pgdb
-
打开cmd切换到“\postgresql-9.6.10\src\tools\msvc”路径
cd /d d:\postgresql-9.6.10\src\tools\msvc -
在“\postgresql-9.6.10\src\tools\msvc”路径下执行安装程序
perl install.pl d:\pg\pgdb此时可能会出现如下错误:
- can’t spawn cmd.exe
需要将C:\Windows\System32加入环境变量,然后重启cmd(修改了环境变量都必须重启cmd才能生效) - can’t locate install.pm

原因是perl缺少Install.pm模块,解决方法是:在“\postgresql-9.6.10\src\tools\msvc”路径下找到Install.pm文件,将其拷贝到红色方框指示的路径下。然后继续执行perl install.pl d:\pg\pgdb,此时又可能出现下面问题:

和前面解决方式类似,在“\postgresql-9.6.10\src\tools\msvc”路径下找到config_default.pl文件,将其拷贝到红色方框指示的路径下,然后继续执行perl install.pl d:\pg\pgdb。应该就可以安装成功:

- can’t spawn cmd.exe
2. 创建数据库
-
进入安装目录
cd /d d:\pg\pgdb\bin -
创建数据库data
.\initdb.exe -D ../data

3. 启动服务
.\pg_ctl.exe -D ../data -l .\logfile start

4.使用客户端连接PostgreSQL
.\psql -d postgres

此时我们已经成功连上PostgreSQL
5. 查询当前进程,使用VS附加
select pg_backend_pid();

当前进程号为2168,我们使用VS2017附加到2168号进程即可开始调试。

6.调试问题
在实际的调试中,很有可能出现手滑改了代码,或者点了重编译!导致了代码和程序不匹配。从而造成断点失效。这个时候怎么办?重新安装即可,步骤如下:
## step1:关闭PostgreSQL服务
## step2:切换到msvc目录
cd /d d:\postgresql-9.6.10\src\tools\msvc
## step3:在“\postgresql-9.6.10\src\tools\msvc”路径下执行安装程序
perl install.pl d:\pg\pgdb
## step4:启动PostgreSQL服务
.\pg_ctl.exe -D ../data -l .\logfile start
## 注意:数据文件不要删,如果删了就需要执行
.\initdb.exe -D ../data
## 来重新初始化数据库
补充说明
- 执行完整个流程后,我们就在本机上部署了一个PostgreSQL实例,但是通常重启后服务会关闭。所以每次重启后直接执行3~5步即可进行调试。
- 在哪里打断点?所有的插入操作都会进入PageAddItemExtended函数,所以找到这个函数打上断点就可以调试整个插入操作的流程。
- 在实际的调试中,很有可能出现手滑改了代码,或者点了重编译!导致了代码和程序不匹配。从而造成断点失效。这个时候怎么办?重新安装即可,步骤如下:
## step1:关闭PostgreSQL服务 ## step2:切换到msvc目录 cd /d d:\postgresql-9.6.10\src\tools\msvc ## step3:在“\postgresql-9.6.10\src\tools\msvc”路径下执行安装程序 perl install.pl d:\pg\pgdb ## step4:启动PostgreSQL服务 .\pg_ctl.exe -D ../data -l .\logfile start ## 注意:数据文件不要删,如果删了就需要执行 .\initdb.exe -D ../data ## 来重新初始化数据库 - 大神博客推荐:http://blog.itpub.net/6906/search/PostgreSQL 源码解读/13
本文档详细介绍了如何在Windows上从源代码编译和调试PostgreSQL 9.6.10。首先,需要安装Visual Studio 2017、ActivePerl、ActiveTcl、MinGW、MIT Kerberos、OpenSSL和Python,并确保环境变量配置正确。接着,解压PostgreSQL源代码,修改VSObjectFactory.pm文件,然后使用Perl编译源代码。在编译过程中,可能遇到nmake或msbuild命令未找到的问题,需要添加环境变量。安装完成后,通过Perl脚本进行安装,并创建数据库、启动服务。最后,使用VS2017附加到进程进行调试。遇到代码和程序不匹配时,只需重新安装PostgreSQL即可。

1万+

被折叠的 条评论
为什么被折叠?



