Skip to content

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

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

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

使用 Microsoft 编译器套件可以构建 32 位和 64 位。可以使用Visual Studio 2015到Visual Studio 2022以及独立的 Windows SDK 版本 10 及更高版本构建 32 位 PostgreSQL。使用Microsoft Windows SDK版本 10 及更高版本或Visual Studio 2015及更高版本支持 64 位 PostgreSQL 构建。

用于使用Visual C++或Platform SDK构建的工具位于src\tools\msvc目录中。构建时,请确保系统 PATH 中没有MinGW或Cygwin的工具。此外,请确保 PATH 中提供了所需的所有 Visual C++ 工具。在Visual Studio中,启动Visual Studio 命令提示符。如果您希望构建 64 位版本,则必须使用该命令的 64 位版本,反之亦然。从Visual Studio 2017开始,可以使用VsDevCmd.bat从命令行执行此操作,请参阅-help以了解可用选项及其默认值。vsvars32.bat在Visual Studio 2015及更早版本中可用,用于相同目的。在Visual Studio 命令提示符中,您可以使用vcvarsall.bat命令更改目标 CPU 架构、构建类型和目标操作系统,例如,vcvarsall.bat x64 10.0.10240.0以使用 64 位发布构建为目标 Windows 10。请参阅-help以了解vcvarsall.bat的其他选项。所有命令都应从src\tools\msvc目录运行。

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

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

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

如果您需要设置任何其他环境变量,请创建一个名为buildenv.pl的文件,并将所需的命令放在其中。例如,当 PATH 中没有 bison 时添加 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 将不起作用。它还必须存在于 PATH 中。可从 https://www.activestate.com 下载二进制文件(注意:需要 5.14 或更高版本,免费标准发行版就足够了)。

以下其他产品不是开始时必需的,但构建完整包时需要。使用config.pl文件指定库所在的目录。

ActiveState TCL

构建 PL/Tcl 时需要(注意:需要 8.4 版,免费标准发行版就足够了)。

BisonFlex

从 Git 构建时需要 BisonFlex,但从发行文件构建时不需要。只有 Bison 2.3 及更高版本才能正常工作。 Flex 必须是 2.5.35 或更高版本。

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

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

注意

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

Diff

运行回归测试需要 Diff,可以从 http://gnuwin32.sourceforge.net 下载。

Gettext

构建 NLS 支持需要 Gettext,可以从 http://gnuwin32.sourceforge.net 下载。请注意,需要二进制文件、依赖项和开发人员文件。

MIT Kerberos

GSSAPI 身份验证支持需要。可以从 https://web.mit.edu/Kerberos/dist/index.html 下载 MIT Kerberos。

libxml2libxslt

XML 支持需要。可以从 https://zlatkovic.com/pub/libxml 下载二进制文件,或从 http://xmlsoft.org 下载源代码。请注意,libxml2 需要 iconv,可以从相同的下载位置获取。

LZ4

支持 LZ4 压缩需要。可以从 https://github.com/lz4/lz4/releases 下载二进制文件和源代码。

Zstandard

支持 Zstandard 压缩需要。可以从 https://github.com/facebook/zstd/releases 下载二进制文件和源代码。

OpenSSL

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

ossp-uuid

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

Python

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

zlib

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

18.1.2. 64 位 Windows 的特殊注意事项#

PostgreSQL 仅在 64 位 Windows 上为 x64 架构构建。

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

要使用服务器端第三方库(例如Python或OpenSSL),此库也必须是 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 GUI 中进行构建。在这种情况下,你需要从命令提示符运行

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 taptest

要更改使用的计划(默认值为并行),请将其附加到命令行,如下所示

vcregress check serial

vcregress taptest可用于运行目标目录的 TAP 测试,如下所示

vcregress taptest src\bin\initdb\

有关回归测试的更多信息,请参见第 33 章

使用vcregress bincheck在客户端程序上运行回归测试,使用vcregress recoverycheck在恢复测试上运行,或使用vcregress taptest指定的 TAP 测试需要安装一个额外的 Perl 模块

IPC::Run

截至撰写本文时,IPC::Run 未包含在 ActiveState Perl 安装中,也未包含在 ActiveState Perl 包管理器 (PPM) 库中。要安装,请从 下载 IPC-Run-<version>.tar.gz 源存档,网址为 https://metacpan.org/dist/IPC-Run,然后解压缩。编辑 buildenv.pl 文件,并添加一个 PERL5LIB 变量以指向解压存档中的 lib 子目录。例如

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

使用vcregress运行的 TAP 测试支持环境变量PROVE_TESTS,它使用给定的名称模式自动展开,以及PROVE_FLAGS。可以在 Windows 终端上设置这些变量,然后再运行vcregress

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'

此外,TAP 测试的行为可以通过一组环境变量进行控制,请参阅第 33.4.1 节

某些 TAP 测试依赖于一组外部命令,这些命令可能会触发与之相关的测试。这些变量中的每一个都可以设置或取消设置buildenv.pl

GZIP_PROGRAM

指向 gzip 命令的路径。默认值为 gzip,它将在已配置的 PATH 中搜索具有该名称的命令。

LZ4

指向 lz4 命令的路径。默认值为 lz4,它将在已配置的 PATH 中搜索具有该名称的命令。

OPENSSL

指向 openssl 命令的路径。默认值为 openssl,它将在已配置的 PATH 中搜索具有该名称的命令。

TAR

指向 tar 命令的路径。默认值为 tar,它将在已配置的 PATH 中搜索具有该名称的命令。

ZSTD

指向 zstd 命令的路径。默认值为 zstd,它将在已配置的 PATH 中搜索具有该名称的命令。