Postgresql 中文操作指南

18.1. Building with Visual C++ or the Microsoft Windows SDK #

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

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

使用 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。有关其他 vcvarsall.bat 选项,请参阅 -help。所有命令都应当从 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. Requirements #

要构建 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 文件指定库的可用目录。

Note

来自 GnuWin32 的 Bison 分发似乎存在一个缺陷,即当 Bison 安装在名称中带有空格的目录(如英语安装中的默认位置 C:\Program Files\GnuWin32)中时,会导致 Bison 发生故障。考虑安装到 C:\GnuWin32 或在您的 PATH 环境设置中对 GnuWin32 使用 NTFS 短名称路径(例如 C:\PROGRA~1\GnuWin32)。

18.1.2. Special Considerations for 64-Bit Windows #

PostgreSQL 仅针对 64 位 Windows 中的 x64 架构进行编译。

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

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

18.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(在源树的根目录中)。

18.1.4. Cleaning and Installing #

大多数情况下,Visual Studio 中的自动依赖项跟踪将处理已更改的文件。但如果发生了较大的更改,您可能需要清除该安装。若要执行此操作,只需运行 clean.bat 命令即可,该命令将自动清除所有生成的文件。您还可以使用 dist 参数运行它,在这种情况下,它将像 make distclean 一样工作,并移除 flex 和 bison 输出文件。

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

install c:\destination\directory

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

install c:\destination\directory client

18.1.5. Running the Regression Tests #

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

有关回归测试的更多信息,请参阅 Chapter 33

使用 vcregress bincheck 对客户端程序运行回归测试,或使用 vcregress recoverycheck 对恢复测试运行回归测试,或使用 vcregress taptest 指定的 TAP 测试,需要安装其他 Perl 模块:

  • IPC::Run

    • 截至本说明撰写之日, IPC::Run 既未包含在 ActiveState Perl 安装中,也未包含在 ActiveState Perl Package Manager (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。这些可以在运行 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'

此外,TAP 测试的行为可以通过一组环境变量进行控制,参见 Section 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 中按该名称搜索命令。