可以使用 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";
构建 PostgreSQL 需要以下其他产品。使用 config.pl
文件指定库所在的目录。
如果您的构建环境没有附带受支持版本的 Microsoft Windows SDK,建议您升级到最新版本(当前版本 10),可从 https://www.microsoft.com/download 下载。
您必须始终包含 SDK 的 Windows 头文件和库 部分。如果您安装了一个包括 Visual C++ 编译器 的 Windows SDK,则无需 Visual Studio 即可构建。请注意,从 8.0a 版开始,Windows SDK 不再附带完整的命令行构建环境。
运行构建生成脚本需要 ActiveState Perl。MinGW 或 Cygwin Perl 将不起作用。它还必须存在于 PATH 中。可从 https://www.activestate.com 下载二进制文件(注意:需要 5.14 或更高版本,免费标准发行版就足够了)。
以下其他产品不是开始时必需的,但构建完整包时需要。使用 config.pl
文件指定库所在的目录。
构建 PL/Tcl 时需要(注意:需要 8.4 版,免费标准发行版就足够了)。
从 Git 构建时需要 Bison 和 Flex,但从发行文件构建时不需要。只有 Bison 2.3 及更高版本才能正常工作。 Flex 必须是 2.5.35 或更高版本。
Bison 和 Flex 都包含在 msys 工具套件中,可从 http://www.mingw.org/wiki/MSYS 作为 MinGW 编译器套件的一部分获得。
除非 flex.exe
和 bison.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,可以从 http://gnuwin32.sourceforge.net 下载。
构建 NLS 支持需要 Gettext,可以从 http://gnuwin32.sourceforge.net 下载。请注意,需要二进制文件、依赖项和开发人员文件。
GSSAPI 身份验证支持需要。可以从 https://web.mit.edu/Kerberos/dist/index.html 下载 MIT Kerberos。
XML 支持需要。可以从 https://zlatkovic.com/pub/libxml 下载二进制文件,或从 http://xmlsoft.org 下载源代码。请注意,libxml2 需要 iconv,可以从相同的下载位置获取。
支持 LZ4 压缩需要。可以从 https://github.com/lz4/lz4/releases 下载二进制文件和源代码。
支持 Zstandard 压缩需要。可以从 https://github.com/facebook/zstd/releases 下载二进制文件和源代码。
SSL 支持需要。可以从 https://slproweb.com/products/Win32OpenSSL.html 下载二进制文件,或从 https://www.openssl.org 下载源代码。
需要 UUID-OSSP 支持(仅限于 contrib)。可以从 http://www.ossp.org/pkg/lib/uuid/ 下载源代码。
需要构建 PL/Python。可以从 https://www.python.org 下载二进制文件。
需要 pg_dump 和 pg_restore 中的压缩支持。可以从 https://www.zlib.net 下载二进制文件。
PostgreSQL 仅在 64 位 Windows 上为 x64 架构构建。
不支持在同一构建树中混合 32 位和 64 位版本。构建系统将自动检测它是在 32 位还是 64 位环境中运行,并相应地构建 PostgreSQL。因此,在构建之前启动正确的命令提示符非常重要。
要使用服务器端第三方库(例如 Python 或 OpenSSL),此库也必须是 64 位。不支持在 64 位服务器中加载 32 位库。PostgreSQL 支持的几个第三方库可能仅提供 32 位版本,在这种情况下,它们不能与 64 位 PostgreSQL 一起使用。
要在发行配置中构建所有 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
(在源树的根目录中)。
大多数情况下,Visual Studio 中的自动依赖项跟踪将处理已更改的文件。但是,如果发生了重大更改,则可能需要清理安装。要执行此操作,只需运行 clean.bat
命令,它将自动清除所有生成的文件。你还可以使用 dist
参数运行它,在这种情况下,它将像 make distclean
一样工作,并删除 flex/bison 输出文件。
默认情况下,所有文件都写入到 debug
或 release
目录的子目录中。要使用标准布局安装这些文件,还要生成初始化和使用数据库所需的文件,请运行命令
install c:\destination\directory
如果您只想安装客户端应用程序和接口库,那么可以使用这些命令
install c:\destination\directory client
要运行回归测试,请确保您已完成所有必需部分的构建。此外,确保系统路径中存在加载系统所有部分所需的 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
未包含在 ActiveState Perl 安装中,也未包含在 ActiveState Perl 包管理器 (PPM) 库中。要安装,请从 CPAN 下载 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
中搜索具有该名称的命令。