windows下源码安装调试postgresql
环境:windows 10
postgresql版本:postgresql-9.6.5
使用工具:vs2017社区版
辅助工具:perl、diff、flex、bison
相关工具下载地址:
perl下载链接:http://pan.baidu.com/s/1i5aPilB
密码:k6f0
diff、flex、bison下载链接: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';”,如下图所示:

以上两步解决pg的perl脚本中不识别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的更多相关文章
- CentOS 7下源码安装MySQL 5.7
网上说linux安装mysql服务分两种安装方法: ①源码安装,优点是安装包比较小,只有几十M左右,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: ②使用官方编译好的二进制文件安装,优点 ...
- CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.h ...
- centos 6x系统下源码安装mysql操作记录
在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...
- lnux下源码安装MySQL 5.6
nux下源码安装MySQL 5.6 说明:本文是我自己测试的MySQL5.6源码安装,经本人亲自实践,完全可用,另在5.6之前的版本也是可以按照本文源码安装的.我是在两台linux下一台安装5.5,另 ...
- CentOS下源码安装Apache2.4+PHP5.4+MySQL5.5
一.准备(把所有的源文件放在‘/home/yuanjun’目录下) apr http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz apr-util ...
- nginx在Centos7.5下源码安装和配置
安装nginx 安装nginx依赖包 yum install -y pcre-devel zlib-devel openssl-devel wget gcc tree vim 进入目录/root/se ...
- 在ConoHa上Centos7环境下源码安装部署LNMP
本文记录了从源码,在Centos 7上手动部署LNMP环境的过程,为了方便以后对nginx和mariadb进行升级,这里采用yum的方式进行安装. 1.建立运行网站和数据库的用户和组 groupadd ...
- CentOS7 下源码安装 python3
CentOS 7 下源码安装 python3 在CentOS7下,默认安装的是python2.7:为满足项目要求,安装python3 的方法如下: 1. 首先安装python3.6可能使用的依 ...
- CentOS7.3环境下源码安装httpd
CentOS7.3环境下源码安装httpd 本文在CentOS7.3下,源码安装apache服务httpd2.4. 1.下载好源码安装包 [root@localhost ~]#ll total 625 ...
随机推荐
- day18 时间:time:,日历:calendar,可以运算的时间:datatime,系统:sys, 操作系统:os,系统路径操作:os.path,跨文件夹移动文件,递归删除的思路,递归遍历打印目标路径中所有的txt文件,项目开发周期
复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块的集 ...
- 前端 CSS 盒子模型
盒模型的概念 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型有两种:标准模型和I ...
- [Python3 填坑] 017 实例方法、静态方法、类方法的区别
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 先上例子 2.2 分析 1. print( 坑的信息 ) 挖坑时间:2019/04/07 明细 坑的编码 内容 Py024-1 实例方法 ...
- vue2.0 watch里面的 deep和immediate作用
deep,默认值是 false,代表是否深度监听.immediate:true代表如果在 wacth 里声明了之后,就会立即先去执行里面的handler方法,如果为 false就跟我们以前的效果一样, ...
- 本地启oracle实例服务无法重启,协议适配器错误
今天遇到一位朋友的oracle实例服务无法起来,启动时报错: 分析的原因是可能早上服务器突然断电造成的,经过对tns的测试 经过我们讨论和诊断,最后诊断的处理方法是将实例删了重装,处理后服务恢复正常: ...
- 0基础入门 docker 部署 各种 Prometheus 案例 - 程序员学点xx 总集篇
目录 大家好, 学点xx 系列也推出一段时间了.虽然 yann 能力有限,但还是收到了很多鼓励与赞赏.对这个系列 yann 还是很喜欢的,特别是 Prometheus 篇,在期间经历公众号 100 篇 ...
- nodejs爬虫编码问题
最近再做一个nodejs网站爬虫的项目,但是爬一些网站的数据出现了中文字符乱码的问题.查了一下,主要是因为不是所有的网站的编码格式都是utf-8,还有一些网站用的是gb2312或者gbk的编码格式.所 ...
- adb 链接网络 connect 安装apk install 断开IP链接 kill-server 连接数devices
https://blog.csdn.net/zhonglunshun/article/details/78362439 ./adb connetc 192.168.1.11 ./adb install ...
- 用Nginx代理请求,处理前后端跨域
自从前端spa框架出现后,都是前后端分离开发了.我们在开发的时候难免会遇到跨域的问题.跨域这种问题解决的方法基本都是在服务端实现的.以java为例,我知道的有3种方法处理跨域: 1.使用 @Cross ...
- 使用JSONP,jQuery的ajax跨域获取json数据
网上找了很多资料,写的不错,推荐下: 1.深入浅出JSONP--解决ajax跨域问题 (http://www.cnblogs.com/chopper/archive/2012/03/24/240394 ...