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 文件指定库的可用目录。
-
ActiveState TCL
-
PL/Tcl 的构建必备(注意:需要版本 8.4,免费的标准发行版就足够了)。
-
-
Bison and Flex
-
构建 Git 必备 Bison 和 Flex,但构建发行文件时它们不是必备条件。只有 2.3 及更高版本的 Bison 可行。Flex 必须是 2.5.35 或更高版本。
-
Bison 和 Flex 都包含在 msys 工具套件中,可从 http://www.mingw.org/wiki/MSYS作为 MinGW 编译器套件的一部分获得。
-
需要将包含 flex.exe 和 bison.exe 的目录添加到 buildenv.pl 的 PATH 环境变量,除非它们已经在 PATH 中。对于 MinGW,该目录是 MinGW 安装目录的 \msys\1.0\bin 子目录。
-
-
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。
-
-
libxml2 and libxslt
-
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_dump 和 pg_restore 中的压缩支持所需。二进制文件可从 https://www.zlib.net 下载。
-
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 输出文件。
默认情况下,所有文件都会写入 debug 或 release 目录的子目录中。若要使用标准布局安装这些文件,还要生成初始化和使用数据库所需的文件,请运行以下命令:
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 中按该名称搜索命令。
-