Postgresql 9.6.10在Windows下的安装和调试

本文档详细介绍了如何在Windows上从源代码编译和调试PostgreSQL 9.6.10。首先,需要安装Visual Studio 2017、ActivePerl、ActiveTcl、MinGW、MIT Kerberos、OpenSSL和Python,并确保环境变量配置正确。接着,解压PostgreSQL源代码,修改VSObjectFactory.pm文件,然后使用Perl编译源代码。在编译过程中,可能遇到nmake或msbuild命令未找到的问题,需要添加环境变量。安装完成后,通过Perl脚本进行安装,并创建数据库、启动服务。最后,使用VS2017附加到进程进行调试。遇到代码和程序不匹配时,只需重新安装PostgreSQL即可。

相关文档

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

    此时可能会出现如下错误:

    1. can’t spawn cmd.exe
      需要将C:\Windows\System32加入环境变量,然后重启cmd(修改了环境变量都必须重启cmd才能生效)
    2. 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。应该就可以安装成功:
      在这里插入图片描述

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值