9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面

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 2013Visual Studio 2022, 以及独立的Windows SDK版本8.1a到10。 支持64位PostgreSQL构建 Microsoft Windows SDK版本8.1a到10或 Visual Studio 2013及以上版本。编译 支持从Windows 7Windows Server 2008 R2 SP1开始, 使用Visual Studio 2013Visual Studio 2022进行构建。

使用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头文件和库部分。如果你安装的是一个包括Visual C++ 编译器Windows SDK,构建时不需要Visual Studio。注意在版本8.0a,Windows SDK中不再包括一个完整的命令行构建环境。

ActiveState Perl

ActiveState Perl被用来运行构建生成脚本。MinGW或Cygwin Perl是不符合要求的。AcitveState Perl也必须存在于PATH中。其二进制文件可以从https://www.activestate.com下载(注意:需要版本5.8.3及以上,免费标准发布就足够了)。

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

ActiveState TCL

构建PL/Tcl所需(注意:需要版本8.4,免费的标准发行版就足够了)。

BisonFlex

BisonFlex是构建Git所需的, 但在从发布文件构建时不需要。只有Bison 1.875或版本2.2及更高版本才能工作。 Flex必须是2.5.31版本或更高版本。

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的特殊考虑

在64位Windows上,PostgreSQL只能为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 Package Manager (PPM)库中。要安装,从CPAN下载 IPC-Run-<version>.tar.gz源代码压缩包, 地址为https://metacpan.org/release/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测试依赖于一组外部命令,这些命令可以选择性地触发与它们相关的测试。这些变量中的每一个都可以在buildenv.pl中设置或取消设置:

GZIP_PROGRAM

gzip命令的路径。默认值是gzip,它将在配置的PATH中搜索该命令的名称。

LZ4

lz4命令的路径。默认值是lz4,它将在配置的PATH中搜索该命令的名称。

TAR

tar命令的路径。默认值是tar,它将在配置的PATH中搜索该命令的名称。

ZSTD

zstd命令的路径。默认值是zstd,它将在配置的PATH中搜索该命令的名称。