Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

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 StudioVisual Studio Express 或某些版本的 Microsoft Windows SDK。如果您尚未设置 Visual Studio 环境,最简单的方法是使用 Visual Studio 2022 中的编译器或 Windows SDK 10 中的编译器,这两者均可从 Microsoft 免费下载。

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

用于使用 Visual C++Platform SDK 构建的工具位于 src\tools\msvc 目录中。构建时,请确保系统 PATH 中没有 MinGWCygwin 的工具。此外,请确保 PATH 中提供了所需的所有 Visual C++ 工具。在 Visual Studio 中,启动 Visual Studio 命令提示符。如果您希望构建 64 位版本,则必须使用该命令的 64 位版本,反之亦然。从 Visual Studio 2017 开始,可以使用 VsDevCmd.bat 从命令行执行此操作,请参阅 -help 以了解可用选项及其默认值。 vsvars32.batVisual 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。因此,在构建之前启动正确的命令提示符非常重要。

要使用服务器端第三方库(例如 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 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) 库中。要安装,请从 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 中搜索具有该名称的命令。