1、源代码下载与准备 pg 词法和语法解析分别使用 flex 和 yacc脚本,也就是源代码里能看到的 .l 和 .y 文件,由他们生成 .c 和 .
1、源代码下载与准备
pg 词法和语法解析分别使用 flex 和 yacc脚本,也就是源代码里能看到的 .l 和 .y 文件,由他们生成 .c 和 .h文件。
更详细资料见:
(很不幸,这个网站是无法直接访问的,自己想办法)
这两个工具在 windows 下的环境一直没有彻底弄好,再加上考虑它们的版本,我都是在 linux 下生成语法引擎,操作步骤见 (2)。
参考资料:《lex与yacc》机械工业出版社
(1) 下载打包好的包,这种方式的好处是不需用 flex和bison
下载地址:
国际社区
国内镜像 ftp://www.highgo.com.cn/pub/mirrors/pgsql/source/
进入第二步,不需要在 linux 生成任何文件。
(2) clone社区 git 代码库,需要:git flex bison
关于git,它是一个强大到一套糊涂的代码管理工具,请自行了解使用方法,官方网站:
(仍然很不幸,自己想办法)
windows下可以安装 cygwin,选装 git 和 openssh,在 cygwin 环境下使用 git。
官方网站:
需要注意的是,编译开关要一致,以下 a-e 步骤需要在 linux 下执行。
a). 克隆代码库
git clone
b). 配置编译参数,可能需要安装一些开发包,根据错误提示安装即可
./configure --prefix=/usr/local/pg93b1 \
--enable-nls=zh_cn zh_tw \
--without-perl \
--without-python \
--without-tcl \
--without-gssapi \
--without-krb5 \
--without-pam \
--without-ldap \
--without-bonjour \
--with-openssl \
--with-libxml --with-libxslt \
--enable-thread-safety \
--with-zlib \
--without-selinux
c). 编译内核
make
d). 编译外围模组
cd contrib & make
cd ..
e). 编译隔离测试脚本
cd src/test/isolation & make
f). 将如下文件拷贝至 windows 下源代码的相同位置
src\backend\bootstrap\bootparse.c
src\backend\bootstrap\bootscanner.c
src\backend\parser\gram.c
src\backend\parser\gram.h
src\backend\parser\scan.c
src\backend\replication\repl_gram.c
src\backend\replication\repl_scanner.c
src\backend\utils\misc\guc-file.c
src\bin\psql\psqlscan.c
contrib\cube\cubeparse.c
contrib\cube\cubescan.c
contrib\seg\segparse.c
contrib\seg\segscan.c
src\interfaces\ecpg\preproc\pgc.c
src\interfaces\ecpg\preproc\preproc.c
src\interfaces\ecpg\preproc\preproc.h
src\pl\plpgsql\src\pl_gram.c
src\pl\plpgsql\src\pl_gram.h
src\test\isolation\specparse.c
src\test\isolation\specscanner.c
2、windows 开发包的下载与准备
windows下编译 postgresql 所需开发包列表见文档 16.1.1. requirements
下载 openssl,这里很全。
ftp://ftp.zlatkovic.com/libxml/
这里也有 openssl,但版本较老。
从这里下载可以下载到 iconv、libxml2、libxslt、zlib,推荐使用
这里下载 gettext
文档提及的 上的包更新已经远远落后于 gnu,但仍然可用。
将下载的包解压到 c:\pgbuild 目录
3、微软vc 下载,express版对我们来说足够,还是免费授权。
安装完毕后,建议打好所有补丁。
4、修改 src\tools\msvc\config_default.pl,指向我们下载到的开发包
nls => c:\\pgbuild\\gettext
openssl => c:\\pgbuild\\openssl
xml => c:\\pgbuild\\libxml2
xslt => c:\\pgbuild\\libxslt
iconv => c:\\pgbuild\\iconv
zlib => c:\\pgbuild\\zlib
6、下载 activeperl 并安装
7、打开 程序菜单 ”microsoft visual studio 2010“ -> ”visual studio tools“ -> ”visual studio command prompt (2010)“
如果是其他版本,注意是 32位的那个,没有把握可以看它的属性,vcvarsall.bat 后边有参数 x86。
set path=%path%;c:\pgbuild\iconv\bin;
set path=%path%c:\activeperl-5.12.x\bin;
set path=%path%c:\pgbuild\gettext\bin;
进入 postgresql 源代码 src\tools\msvc 运行 build.bat
编译完毕后运行: install.bat
8、至此编译完成,但是有些 dll 文件需要手工拷贝,,根据文件缺失错误提示从第二步的开发包目录中查找。