18.1. 使用Visual C++Microsoft Windows SDK构建

18.1.1. 要求
18.1.2. 针对64位Windows的特殊考虑
18.1.3. 构建
18.1.4. 清理和安装
18.1.5. 运行回归测试

PostgreSQL可以使用来自微软的Visual C++编译器套件构建。这些编译器可以来自于Visual StudioVisual Studio Express或者Microsoft Windows SDK的某些版本。如果你还没有准备好一个Visual Studio环境设置,最简单的方式是使用Visual Studio 2019中的编译器,或者Windows SDK 10中的,两者都可以从微软免费下载。

使用微软编译器套件可以编译得到 32 位和 64 位版本。32 位的 PostgreSQL 可以使用 Visual Studio 2013Visual Studio 2019(包括精简版)编译, 单独的Windows SDK 8.1a 到 10亦可。 64位PostgreSQL的构建支持 Microsoft Windows SDK版本8.1a 到 10或 Visual Studio 2013及以上版本。 使用Visual Studio 2013Visual Studio 2019编译时最低支持 Windows 7Windows Server 2008 R2 SP1

使用Visual C++Platform SDK构建的工具在src\tools\msvc目录中。在构建时,请确定在系统路径中没有来自于MinGW或的Cygwin工具。同样,确保所有需要的Visual C++工具都在PATH中。在Visual Studio中,启动Visual Studio Command Prompt。如果你希望构建一个64位版本,你必须使用64位版本的命令,反之亦然。在Microsoft Windows SDK中,启动该SDK在启动菜单中的CMD shell。在最近的SDK版本中你可以使用setenv命令改变目标CPU架构、构建类型以及目标OS,例如setenv /x86 /release /xp会设置为Windows XP或更高版本上的32位发布构建。使用/?来了解setenv的其他选项。所有命令应该从src\tools\msvc目录运行。

在开始构建之前,你还需要编辑文件config.pl来反映任何你想改变的配置选项,或者要使用的任何第三方库目录。完整的配置在第一次读取并解析文件config_default.pl时确定,然后应用config.pl中的任何改变。例如,要制定你的Python安装的位置,将下面的内容放在config.pl中:

$config->{python} = 'c:\python26';

你只需要指定那些和config_default.pl中不同的参数即可。

如果你希望设置任何其他环境变量,可创建一个名为buildenv.pl的文件并将需要的命令放在其中。例如,要把不在PATH中的bison路径加上,创建一个包含以下内容的文件:

$ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin';

传递更多的命令行参数到Visual Studio构建命令(msbuild 或 vcbuild):

$ENV{MSBFLAGS}="/m";

18.1.1. 要求

构建PostgreSQL时需要下列附加产品。使用config.pl文件来指定这些库所在的目录。

Microsoft Windows SDK

如果你的构建环境中没有一个受支持的Microsoft Windows SDK版本,推荐你升级到最新版(当前版本为10),可从https://www.microsoft.com/download下载。

你必须总是包括SDK中的Windows头文件和库部分。如果你安装的是一个包括Visual C++ 编译器Windows SDK,构建时不需要Visual Studio。注意在版本8.0a,Windows SDK中不再包括一个完整的命令行构建环境。

ActiveState Perl

ActiveState Perl被用来运行构建生成脚本。MinGW或Cygwin Perl是不符合要求的。AcitveState Perl也必须存在于PATH中。其二进制文件可以从https://www.activestate.com下载(注意:需要版本5.8.3及以上,免费标准发布就足够了)。

下面的附加产品在开始时并不要求,但是如果要构建完整的包就需要它们。使用config.pl文件来指定这些库所在的目录。

ActiveState TCL

用于构建PL/Tcl(注意:要求版本8.4,免费标准发布即可)。

BisonFlex

BisonFlex用来从Git构建,但使用发行文件构建时可以不要求。只有Bison 1.875或2.2及以上才能正常工作。Flex则必须是版本2.5.31或以上。

BisonFlex 都包括在msys工具套件中,它作为 MinGW编译器套件的一部分可以从 http://www.mingw.org/wiki/MSYS得到。

你将需要把包含flex.exebison.exe 的目录加入到buildenv.pl中的PATH环境变量中, 除非它们已经存在于PATH中。在MinGW的情况下, 目录将是MinGW安装目录的\msys\1.0\bin子目录。

注意

来自GnuWin32的Bison发布似乎有一个故障,它会导致Bison安装于名称中有空格的目录时发生故障,例如英语安装的默认位置C:\Program Files\GnuWin32。考虑将它安装到C:\GnuWin32或者在PATH环境设置中使用NTFS段路径名(例如C:\PROGRA~1\GnuWin32)。

Diff

Diff是回归测试所需要的,可以从http://gnuwin32.sourceforge.net得到。

Gettext

Gettext用于NLS支持,可以从http://gnuwin32.sourceforge.net得到。注意二进制程序、依赖文件以及开发者文件都需要。

MIT Kerberos

用于 GSSAPI 认证支持。MIT Kerberos可以从http://web.mit.edu/Kerberos/dist/index.html下载。

libxml2 and libxslt

用于XML支持。二进制文件可以从http://zlatkovic.com/pub/libxml得到,源代码可以从http://xmlsoft.org得到。注意libxml2需要iconv,后者也可以在相同的下载位置得到。

LZ4

用于支持LZ4压缩方法来压缩表数据。二进制文件和源代码可以从 https://github.com/lz4/lz4/releases下载。

OpenSSL

用于SSL支持。二进制文件可以从https://slproweb.com/products/Win32OpenSSL.html下载,源代码可以从https://www.openssl.org下载。

ossp-uuid

用于UUID-OSSP支持(contrib only)。源代码可以从http://www.ossp.org/pkg/lib/uuid/下载。

Python

用于构建PL/Python。二进制文件可以从https://www.python.org下载。

zlib

用于pg_dumppg_restore中的压缩支持。二进制文件可以从http://www.zlib.net下载。

18.1.2. 针对64位Windows的特殊考虑

在64位Windows上,PostgreSQL只能为x64架构构建,因此无法支持安腾处理器。

不支持在同一个构建树中混合32位和64位版本。构建系统会自动检测它运行在32位还是64位环境中,然后相应地构建PostgreSQL。鉴于此,在构建前启动正确的命令提示很重要。

要使用服务器端的第三方库如pythonOpenSSL,该库必须也是64位。在一个64位服务器上载入一个32位库是不被支持的。PostgreSQL支持的一些第三方库可能只有32位版本,在这种情况下它们就不能被用于64位PostgreSQL。

18.1.3. 构建

要在发行配置中构建PostgreSQL的所有部分(默认),运行命令:

build

要在调试配置中构建PostgreSQL的所有部分,运行命令:

build DEBUG

要构建单独一个对象,例如psql,运行命令:

build psql
build DEBUG psql

要将默认的构建配置改变成调试,将下面的内容放在buildenv.pl文件中:

$ENV{CONFIG}="Debug";

也可以在Visual Studio的图形界面中进行构建。在这种情况下,你需要在命令提示符下运行:

perl mkvcbuild.pl

然后在Visual Studio中打开生成的pgsql.sln(在源代码树的根目录中)。

18.1.4. 清理和安装

在大部分时间里,Visual Studio的自动依赖跟踪会处理发生改变的文件。但是如果发生了大量的改变,你也许需要清理整个安装。为此,只要运行clean.bat命令,它将会自动清除所有生成的文件。你也可以使用dist参数运行它,这种情况下它的效果和make distclean一样,并且会移除flex/bison的输出文件。

默认情况下,所有的文件都被写入到名为debugrelease的子目录中。要将这些文件以标准布局进行安装并且生成初始化和使用数据库所需的文件 ,运行命令:

install c:\destination\directory

如果你想只安装客户端应用和接口库,那么你可以使用这些命令:

install c:\destination\directory client

18.1.5. 运行回归测试

要运行回归测试,确保你已经完成了所有所需部分的构建。另外,确保载入整个系统所需的DLL(例如Perl和Python过程语言所需的DLL)都在系统路径中。如果它们不在路径中,通过buildenv.pl文件设置。要运行测试,可以从src\tools\msvc目录运行以下命令之一:

vcregress check
vcregress installcheck
vcregress plcheck
vcregress contribcheck
vcregress modulescheck
vcregress ecpgcheck
vcregress isolationcheck
vcregress bincheck
vcregress recoverycheck
vcregress upgradecheck

要更改使用的调度方式(默认为并行),在命令行后增加调度方式,如:

vcregress check serial

关于回归测试详见第 33 章

vcregress bincheckvcregress recoverycheck 分别可以运行客户端程序上的回归测试和恢复测试,这要求 安装了额外的 Perl 模块:

IPC::Run

从编写这份文档时起,IPC::Run没有被包括在 ActiveState Perl 安装或者 ActiveState Perl Package Manager (PPM) 库中。要安装,请从 CPAN (在 https://metacpan.org/release/IPC-Run)下载 IPC-Run-<version>.tar.gz源代码归档并且解压。 编辑buildenv.pl文件,并且增加一个 PERL5LIB 变量 指向解压得到的归档中的lib子目录。例如:

$ENV{PERL5LIB}=$ENV{PERL5LIB} . ';c:\IPC-Run-0.94\lib';

vcregress运行的TAP测试支持环境变量PROVE_TESTS以及PROVE_FLAGS,该变量使用给定的命名模式自动扩展。 这些可以在运行 vcregress命令前, 在 Windows 终端设置好 :

  set PROVE_FLAGS=--timer --jobs 2
  set PROVE_TESTS=t/020*.pl t/010*.pl
  

也可以在文件中设置这些参数 buildenv.pl:

  $ENV{PROVE_FLAGS}='--timer --jobs 2'
  $ENV{PROVE_TESTS}='t/020*.pl t/010*.pl'