9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面

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

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

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

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

使用Visual C++Platform SDK构建的工具在src\tools\msvc目录中。在构建时,请确定在系统路径中没有来自于MinGW或的Cygwin工具。同样,确保所有需要的Visual C++工具都在PATH中。在Visual Studio中,启动Visual Studio Command Prompt。如果你希望构建一个64位版本,你必须使用64位版本的命令,反之亦然。在Microsoft Windows SDK中,启动该SDK在启动菜单中的CMD shell。在最近的SDK版本中你可以使用setenv命令改变目标CPU架构、构建类型以及目标OS,例如setenv /x86 /release /xp会设置为Windows XP或更高版本上的32位发布构建。使用/?来了解setenv的其他选项。所有命令应该从src\tools\msvc目录运行。

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

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

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

如果你希望设置任何其他环境变量,可创建一个名为buildenv.pl的文件并将需要的命令放在其中。例如,要把不在PATH中的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 Headers and Libraries部分。 如果您安装了包含Visual C++ CompilersWindows SDK,则无需 Visual Studio即可构建。 请注意,从版本8.0a开始,Windows SDK不再附带完整的命令行构建环境。

Strawberry Perl

构建生成脚本需要Strawberry Perl。MinGW或Cygwin Perl无法使用。 它还必须存在于PATH中。二进制文件可以从 https://strawberryperl.com下载。

以下额外的产品并非必需即可开始使用,但是构建完整包时是必需的。使用config.pl文件指定库所在的目录。

Magicsplat Tcl

构建PL/Tcl所需。 可从 https://www.magicsplat.com/tcl-installer/index.html 下载二进制文件。

BisonFlex

BisonFlex 是从 Git 构建所需的,但从发布文件构建时不需要。只有 Bison 2.3 及更高版本可以使用。Flex 必须是 2.5.35 或更高版本。

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

你需要将包含flex.exebison.exe的目录添加到buildenv.pl中的PATH环境变量中,除非它们已经在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

Gettext是必须使用NLS支持构建的,并且可以从http://gnuwin32.sourceforge.net下载。 请注意,需要所有的二进制文件、依赖项和开发者文件。

MIT Kerberos

用于GSSAPI认证支持。MIT Kerberos可以从 https://web.mit.edu/Kerberos/dist/index.html下载。

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支持。源代码可以从 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的图形界面中进行构建。在这种情况下,你需要在命令提示符下运行:

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,或者运行指定的TAP测试可以使用 vcregress taptest,这需要安装一个额外的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,该变量使用给定的命名模式自动扩展。 这些可以在运行 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 测试的行为可以通过一组环境变量来控制,请参见 第 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中搜索该名称的命令。