17.1. 使用 Visual C 或 Microsoft Windows SDK 构建

可以使用 Microsoft 的 Visual C 编译器套件来构建 PostgreSQL。这些编译器可以来自 Visual Studio,Visual Studio Express 或某些版本的 Microsoft Windows SDK。如果尚未设置 Visual Studio 环境,则最简单的方法是使用 Visual Studio 2019 或 Windows SDK 10 中的编译器,这两个编译器均可以从 Microsoft 免费下载。

Microsoft Compiler 套件可以同时进行 32 位和 64 位构建。 Visual Studio 2005 到 Visual Studio 2019 以及独立的 Windows SDK 版本 6.0 到 10 都可以使用 32 位 PostgreSQL 构建。MicrosoftWindows SDK 版本 6.0a 到 10 或 Visual Studio 2008 及更高版本支持 64 位 PostgreSQL 构建。使用 Visual Studio 2005 编译到 Visual Studio 2013 时,编译到 Windows XP 和 Windows Server 2003 均受支持。使用 Visual Studio 2015 的编译到 Windows Vista 和 Windows Server 2008 均受支持。使用 Visual Studio 2017 和 Visual Studio 2019 的编译时受支持 Windows 7 SP1 和 Windows Server 2008 R2 SP1.

使用 Visual C 或 Platform SDK 进行构建的工具位于src/tools/msvc目录中。在构建时,请确保系统路径中没有 MinGW 或 Cygwin 的工具。此外,请确保 PATH 中具有所有必需的 Visual C 工具。在 Visual Studio 中,启动 Visual Studio 命令提示符。如果要构建 64 位版本,则必须使用命令的 64 位版本,反之亦然。在 Microsoft Windows SDK 中,启动“开始”菜单上 SDK 下方列出的 CMD Shell。在最新的 SDK 版本中,您可以使用setenv命令更改目标 CPU 体系结构,构建类型和目标 OS,例如setenv /x86 /release /xp以 32 位版本的发行版定位到 Windows XP 或更高版本。有关setenv的其他选项,请参见/?。所有命令应从src\tools\msvc目录运行。

在构建之前,您可能需要编辑文件config.pl以反映要更改的任何配置选项,或要使用的任何第三方库的路径。通过首先读取并解析文件config_default.pl,然后应用对config.pl的任何更改,可以确定完整的配置。例如,要指定 Python 安装的位置,请将以下内容放在config.pl中:

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

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

如果需要设置其他任何环境变量,请创建一个名为buildenv.pl的文件,然后在其中放置所需的命令。例如,要添加不在路径中的野牛路径,请创建一个包含以下内容的文件:

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

要将其他命令行参数传递给 Visual Studio 构建命令(msbuild 或 vcbuild):

$ENV{MSBFLAGS}="/m";

17.1.1. Requirements

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

  • Microsoft Windows SDK

    • 如果您的构建环境未附带受支持的 Microsoft Windows SDK 版本,则建议您升级到最新版本(当前为版本 10),可从https://www.microsoft.com/download下载。

您必须始终将 SDK 的 WindowsHeaders 和库部分包括在内。如果安装包括 Visual C 编译器的 Windows SDK,则不需要 Visual Studio 来构建。请注意,从 8.0a 版开始,Windows SDK 不再附带完整的命令行生成环境。

  • ActiveState Perl

    • 运行构建生成脚本需要 ActiveState Perl。 MinGW 或 Cygwin Perl 将不起作用。它也必须存在于 PATH 中。可以从http://www.activestate.com下载二进制文件(注意:需要版本 5.8.3 或更高版本,免费的标准发行版就足够了)。

下列其他产品不是入门所需的,但它们是构建完整程序包所必需的。使用config.pl文件来指定库所在的目录。

  • ActiveState TCL

    • 构建 PL/Tcl 是必需的(注意:需要版本 8.4,免费的标准发行版就足够了)。
  • 野牛和 Flex

    • 从 Git 进行构建需要 Bison 和 Flex,而从发行文件进行构建则不需要 Bison 和 Flex。仅 Bison 1.875 或 2.2 版及更高版本有效。 Flex 必须为 2.5.31 或更高版本。

Bsys 和 Flex 都包含在 msys 工具套件中,可作为 MINGW 编译器套件的一部分从http://www.mingw.org/wiki/MSYS获得。

您需要将包含flex.exebison.exe的目录添加到buildenv.pl中的 PATH 环境变量中,除非它们已经在 PATH 中。对于 MinGW,该目录是 MinGW 安装目录的\msys\1.0\bin子目录。

Note

GnuWin32 的 Bison 发行版似乎存在一个错误,当将 Bison 安装在名称中带有空格的目录中时,例如在英语安装C:\Program Files\GnuWin32的默认位置,该错误会导致 Bison 出现故障。考虑安装到C:\GnuWin32或在 PATH 环境设置(例如C:\PROGRA~1\GnuWin32)中使用 GFS 的 NTFS 短名称路径。

Note

在 64 位 Windows 主机上,在 PostgreSQL FTP 站点上分发并在较旧的文档中引用的过时的winflex二进制文件将失败,并显示“ flex:致命内部错误,执行失败”。请改用 MSYS 中的 Flex。

17 .1.2. 64 位 Windows 的特殊注意事项

PostgreSQL 仅在 64 位 Windows 上针对 x64 架构构建,不支持 Itanium 处理器。

不支持在同一构建树中混合使用 32 位和 64 位版本。构建系统将自动检测它是否在 32 位或 64 位环境中运行,并相应地构建 PostgreSQL。因此,在构建之前启动正确的命令提示符很重要。

要使用服务器端第三方库(例如 python 或 openssl),该库必须也必须是 64 位的。不支持在 64 位服务器中加载 32 位库。 PostgreSQL 支持的几个第三方库可能仅在 32 位版本中可用,在这种情况下,它们不能与 64 位 PostgreSQL 一起使用。

17.1.3. Building

要以发布配置(默认)构建所有 PostgreSQL,请运行以下命令:

build

要在调试配置中构建所有 PostgreSQL,请运行以下命令:

build DEBUG

要仅构建一个项目(例如 psql),请运行以下命令:

build psql
build DEBUG psql

要将默认的构建配置更改为要调试,请将以下内容放在buildenv.pl文件中:

$ENV{CONFIG}="Debug";

也可以从 Visual Studio GUI 内部进行构建。在这种情况下,您需要运行:

perl mkvcbuild.pl

在命令提示符下,然后在 Visual Studio 中打开生成的pgsql.sln(在源树的根目录中)。

17 .1.4. 清洁与安装

大多数情况下,Visual Studio 中的自动依赖项跟踪将处理更改的文件。但是,如果进行了较大的更改,则可能需要清理安装。为此,只需运行clean.bat命令,它将自动清除所有生成的文件。您也可以使用* dist *参数运行它,在这种情况下,它的行为将像 make distclean 一样,并删除 flex/bison 输出文件。

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

install c:\destination\directory

如果只想安装 Client 端应用程序和接口库,则可以使用以下命令:

install c:\destination\directory client

17 .1.5. 运行回归测试

要运行回归测试,请确保首先完成了所有必需 Component 的构建。另外,请确保系统路径中存在加载系统所有部分所需的 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

有关回归测试的更多信息,请参见Chapter 32

使用vcregress bincheck在 Client 端程序上运行回归测试,或者使用vcregress recoverycheck在恢复测试上运行回归测试,需要安装附加的 Perl 模块:

  • IPC::Run

    • 在撰写本文时,ActiveState Perl 安装程序或 ActiveState Perl 程序包 Management 器(PPM)库中都不包含IPC::Run。要安装,请从 CPAN https://metacpan.org/release/IPC-Run/下载IPC-Run-<version>.tar.gz源 Files,然后解压缩。编辑buildenv.pl文件,并添加一个 PERL5LIB 变量以指向提取的存档中的lib子目录。例如:
$ENV{PERL5LIB}=$ENV{PERL5LIB} . ';c:\IPC-Run-0.94\lib';

17 .1.6. 构建文件

以 HTML 格式构建 PostgreSQL 文档需要几个工具和文件。为所有这些文件创建一个根目录,并将它们存储在下面列表中的子目录中。

编辑buildenv.pl文件,并为根目录的位置添加一个变量,例如:

$ENV{DOCROOT}='c:\docbook';

要生成文档,请运行命令builddoc.bat。请注意,这实际上将运行两次构建,以生成索引。生成的 HTML 文件将位于doc\src\sgml中。