windows下简单编译PostgreSQL源代码

pg作为一个开源库还是很不错的,但是在windows下完全编译pg是一项很困难的工作,设计到的东西很多。搞了两天,发现还是有一种简单的方式,就是不采用完全编译,我们仅仅生成sln项目。这样的话,可以只需要安装了perl就可以了,不需要安装其他的工作。这个也是参考了其他网友的工作。本人经过尝试PG源代码中9.0.0可以采用这种方式,更高的版本中存在一个问题,在调用pl的过程中部分函数有问题,主要是获取编译器版本的时候。不过9.0的版本,简单的学习已经基本够用了。

原文链接:http://blog.csdn.net/youngtiger86/article/details/6882457

原文如下:

postgresql 是一款优秀的开源数据库。基于工作需要和个人兴趣,在空余时间稍稍学习下其代码。第一件事就是在 windows 下搭建其 VC 工程啦,这样就可以借助功能强大的 sourceinsight 和 VC 浏览和调试代码啦。

1. 安装辅助软件 perl。因为 postgresql 的源码包中并不自带 vc 工程,但提供生成工程的相关脚本,可借助 perl 生成。在网上找到 perl 下载安装(http://www.perl.org/get.html),安装好后可在命令行下输入命令: perl -version 看是否安装成功,我执行的结果如下(如果提示找不到命令,可能是环境变量没有设置,找到 perl 中的 bin 目录,将其路径加入到环境变量的 path 里面就可以了):


1. 从官网上下载需要的版本的源码(如 9.0.3):http://www.postgresql.org/ftp/source/

2. 解压代码压缩包到本地某目录,解压后目录结构如下图:


3. 修改配置文件,准备生成 VC 的工程文件。进入目录 \src\tools\msvc 下,找到 config_default.pl(稍早版本应该是 config.pl),打开该文件,其内容大致如下。由于我们只安装了 perl,而且这已经足够生成 VC 工程了,所以我就把其他的都注释掉了,如果实际需要其它项的话,可以安装相应软件,并且在下面的文件中将其注释去掉。

# Configuration arguments for vcbuild.
use strict;
use warnings;


our $config = {
asserts=>0, # --enable-cassert
# integer_datetimes=>1, # --enable-integer-datetimes - on is now default
# float4byval=>1, # --disable-float4-byval, on by default
# float8byval=>0, # --disable-float8-byval, off by default
# blocksize => 8, # --with-blocksize, 8kB by default
# wal_blocksize => 8, # --with-wal-blocksize, 8kb by default
# wal_segsize => 16, # --with-wal-segsize, 16MB by default
#ldap=>1, # --with-ldap
#nls=>undef, # --enable-nls=
#tcl=>undef, # --with-tls=
perl=>'C:\tools\Perl', # --with-perl,我只保留了这一个,因为我只需要这一个,呵呵
#python=>undef, # --with-python=
#krb5=>undef, # --with-krb5=
#openssl=>undef, # --with-ssl=
#uuid=>undef, # --with-ossp-uuid
#xml=>undef, # --with-libxml=
#xslt=>undef, # --with-libxslt=
#iconv=>undef, # (not in configure, path to iconv)
#zlib=>undef # --with-zlib=
};


1;

以上各项的具体含义,一会儿给一个链接,有兴趣的朋友可以看看,写得比较详细,我就不赘述了。

4. 好了,让我们现在命令行里试一把。先切换到 \src\tools\msvc 目录,然后用 perl 处理 build.pl,如下图:


会提示Solution.pm 中的一个错误

5. 打开 Solution.pm,转到 69 行,看看到底是啥问题?69行开始的内容如下:

# Determine version of vcbuild command, to set proper verison of visual studio
open(P,"vcbuild /? |") || die "vcbuild command not found";
my $line =

;
close(P);
if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
{
die "Unable to determine vcbuild version from first line of output!";
}
if ($1 == 8) { $self->{vcver} = '8.00' }
elsif ($1 == 9) { $self->{vcver} = '9.00' }
else { die "Unsupported version of Visual Studio: $1" }
print "Detected Visual Studio version $self->{vcver}\n";

不难看出,这里是要确定 vc 编译器的版本,可是, vcbuild 命令系统不认识。。。在命令行里试了一把,果然不认识。这里有一个比较简单地解决办法,就是根据自己的编译器类型,我们直接把上面的编译器类型给指定了,呵呵,更好地办法大家可以上网搜罗下。也就是说,改成下面这样(我装的是 VS2010,这里没有给出对应的版本号,所以我就给 9.00 啦,也就是对应 VS2008,等生成好了,用 VS2010 打开升级下就可以了):

# Determine version of vcbuild command, to set proper verison of visual studio
#open(P,"vcbuild /? |") || die "vcbuild command not found";
#my $line =

;
#close(P);
#if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
#{
# die "Unable to determine vcbuild version from first line of output!";
#}
#if ($1 == 8) { $self->{vcver} = '8.00' }
#elsif ($1 == 9) { $self->{vcver} = '9.00' }
#else { die "Unsupported version of Visual Studio: $1" }
#print "Detected Visual Studio version $self->{vcver}\n";
$self->{vcver}='9.00‘; #注意这个后面有个分号哦,我刚刚就搞掉了,哇哈哈

6. 好了,在来生成一下:

hoho~~~开始干活啦~~~兴奋ing~~~~

最后一行可能会报一个 msbuild 命令不认识,先不管它。

7. 好了,咱们来看看都变出了些神马东西。切换到代码的最上层目录下,


哇,好多工程文件啊!看来咱们成功了,欢呼~~~

好了,找找,有个 .sln 的解决方案文件的,名字叫做 pgsql.sln,找到之后,猛击啊!

我装的是 VS2010,生成的是 VS2008 的工程,打开的时候会提示装换,果断转。如果您安装的是稍早的版本,在上面的 5 中,可以设置对应的版本号哦!

8. 装换中¥!%@!¥%¥#…………&*……

9. 转换成功!


编译一把试试,变那个黑黑的 postgres 工程就可以啦!编译成功啦,环境也就搭建好啦!

好了,工程搭建就说到这里了,使用的问题后面再说吧!写得不好的或者看不懂的地方,欢迎大家拍砖啊!希望对大家有所帮助。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法:打开scws-1.2.3\win32里的解决方案文件,里面包括了scws和zhparser,另外一个是scws的php扩展不用编译 zhparser是Postgresql中进行中文分词的常用扩展,网上的相关资料很多,安装的教程也不少,但大多数是linux的,并没有windows的安装介绍。原因有两个方面,一个是本身像这种数据库服务器一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类工具。对于博主这种只使用windows环境(其实Postgresql也是刚接触),连makefile也搞不明白的真是头大。好在万变不离其中,编译环境只是工具,只要搞清楚个中原理(看代码),移植到windows+VS的环境应该也不是难事(当然这个也只是在轻量级的库下面适用)。下面进入正题: 干货在这里 ① 编译scws:由于 zhparser是基于scws(scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本中的内容按照词典进行分词,提取关键字等。)做的分词,因此先要编译scws,网上下载下来的源码有vs2008的版本,因此,直接编译,后来出现头文件无法加入的错误,将相关文件编码方式修改成unicode解决(利用notepad++ 编码->转换为UTF-8编码)。 ② 编译zhparser:由于zhparser只提供了linux下面的makefile文件,想着用Mingw去编译,后来因为postgresql所在目录有空格,导致编译过程也失败。只好到vs2008里自建一个工程,建好工程后,首先把scws的头文件和库文件加进去,然后把postgresql的头文件和库文件加进去,设置项目属性为生成dll文件。 ③ 扩展安装:编译成功以后,在postgresql下面运行:create extension zhparser; 提示找不到control文件,在下载的源码文件夹里找到该文件,放到指定目录,再次运行sql,提示找不到dll文件,将dll文件放到指定目录,再运行,提示找不到zhprs_start函数,看来是dll没有正常explort出函数,修改源代码中的相关函数声明,再次运行后,显示成功。但zhparser源文件下其实还有很多文件,包括一个词典文件和ini配制文件,还不知道应该放在何处。 ④ zhparser运行环境配制:运行测试sql语句,发现并没有实现分词,想起来应该是词典位置不正确,到zhparser源码中去搜寻,发现如下代码,看来是放到tsearch_data目录下面,用同样的方法找到ini文件的目录,将它们都放进去,再次运行测试代码,得到正确结果。 测试代码: REATE EXTENSION zhparser; -- make test configuration using parser CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; select to_tsvector('testzhcfg','南京市长江大桥');
编译安装PostgreSQL的步骤如下: 1. 首先,为PostgreSQL创建一个目录,例如/home/postgres,并确保该目录的所有者是postgres用户,组是postgres组。可以使用以下命令完成此操作: ``` mkdir /home/postgres chown postgres /home/postgres chgrp postgres /home/postgres ``` 2. 下载PostgreSQL源代码压缩包和对应的MD5校验文件。可以使用以下命令下载: ``` wget https://ftp.postgresql.org/pub/source/v${PG_VERSION_NUM}/postgresql-${PG_VERSION_NUM}.tar.bz2 wget https://ftp.postgresql.org/pub/source/v${PG_VERSION_NUM}/postgresql-${PG_VERSION_NUM}.tar.bz2.md5 ``` 3. 进入下载的源代码目录,并执行编译和安装。假设源代码解压后的目录是/root/postgresql-9.2.24(根据实际情况修改),可以使用以下命令完成编译和安装: ``` cd /root/postgresql-9.2.24/contrib/pageinspect make make install ``` 这些命令将编译并安装Pageinspect扩展,它是PostgreSQL的一个附加模块。安装过程将创建必要的目录和文件,并将Pageinspect扩展安装到适当的位置。 请注意,上述步骤中的路径和版本号可能需要根据实际情况进行修改。此外,在执行编译和安装之前,确保已经安装了相关的构建工具和依赖项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一、PostgreSQL编译安装](https://blog.csdn.net/yuanyuanstudent/article/details/128239127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [PostgreSQL 编译安装通用步骤](https://blog.csdn.net/qiuchenjun/article/details/131356450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值