选择 打开 改范围 完整检索页
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本手册首页的对应页面,或其他在上面列出的活跃大版本。

Chapter 17. 在 Windows 上从源代码安装

建议大多数用户下载适用于 Windows 的二进制发行版,它可以从PostgreSQL网站获得图形化安装程序包。从源码构建仅面向开发PostgreSQL或扩展的人员。

Windows上构建 PostgreSQL 有几种不同的方法。使用 Microsoft 工具进行构建的最简单方式,是安装Visual Studio 2022并使用其自带的编译器。也可以使用完整的Microsoft Visual C++ 2005 to 2022进行构建。在某些情况下,除编译器之外还需要安装Windows SDK

也可以使用MinGW提供的 GNU 编译器工具构建 PostgreSQL,或者在较旧版本的Windows上使用Cygwin

使用MinGWCygwin构建时,采用的是常规构建系统,见Chapter 16以及Section 16.7.5Section 16.7.2中的专门说明。要在这些环境中生成原生 64 位二进制文件,请使用MinGW-w64工具。这些工具也可用于在其他主机(例如LinuxmacOS)上为 32 位和 64 位Windows目标进行交叉编译。不建议使用Cygwin运行生产服务器,它只应用于原生构建无法工作的较旧版本Windows,例如Windows 98。官方二进制文件是使用Visual Studio构建的。

原生构建的psql不支持命令行编辑。Cygwin构建支持命令行编辑,因此如果需要在Windows上交互式使用 psql,应当使用它。

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

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

使用 Microsoft 编译器套件既可以构建 32 位版本,也可以构建 64 位版本。32 位 PostgreSQL 可以使用 Visual Studio 2005Visual Studio 2022 构建,也可以使用独立发布的 Windows SDK 6.0 到 10 版本。64 位 PostgreSQL 支持使用 6.0a 到 10 版本的 Microsoft Windows SDKVisual Studio 2008 及以上版本构建。使用 Visual Studio 2005Visual Studio 2013 构建时,编译最低支持到 Windows XPWindows Server 2003。使用 Visual Studio 2015 构建时,最低支持到 Windows VistaWindows Server 2008。使用 Visual Studio 2017Visual Studio 2022 构建时,最低支持到 Windows 7 SP1Windows Server 2008 R2 SP1

使用Visual C++Platform SDK构建所需的工具位于src/tools/msvc目录中。构建时,请确保系统 PATH 中没有来自MinGWCygwin的工具。同时,也要确保所需的 Visual C++ 工具都已在 PATH 中可用。在Visual Studio中,启动Visual Studio Command Prompt。如果你想构建 64 位版本,就必须使用 64 位版本的命令提示符,反之亦然。在 Microsoft Windows SDK 中,启动开始菜单中 SDK 项下列出的 CMD shell。在较新的 SDK 版本中,可以使用 setenv 命令更改目标 CPU 架构、构建类型以及目标操作系统,例如使用 setenv /x86 /release /xp 来面向 Windows XP 或更高版本进行 32 位发行版构建。setenv 的其他选项见 /?。所有命令都应在src\tools\msvc目录中运行。

在构建之前,你可以创建config.pl文件,以反映你想更改的任何配置选项,或要使用的任何第三方库的路径。完整配置是先读取并解析config_default.pl文件,再应用来自config.pl的任何更改而得到的。例如,要指定Python安装位置,可在config.pl中写入以下内容:

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

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

如果你需要设置其他环境变量,请创建一个名为buildenv.pl的文件,并将所需命令放入其中。例如,如果 bison 不在 PATH 中,可以创建一个包含以下内容的文件,以将其路径加入 PATH:

$ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin';

如果要向 Visual Studio 构建命令(msbuild 或 vcbuild)传递额外的命令行参数:

$ENV{MSBFLAGS}="/m";

17.1.1. 需求

以下附加产品是构建 PostgreSQL 所必需的。请使用 config.pl 文件指定各个库所在的目录。

Microsoft Windows SDK

如果你的构建环境未附带受支持版本的Microsoft Windows SDK,建议升级到最新版本(目前为版本 10),可从https://www.microsoft.com/download下载。

你必须始终包含 SDK 中的Windows Headers and Libraries部分。如果你安装的Windows SDK包含Visual C++ Compilers,则无需Visual Studio即可构建。请注意,从 8.0a 版本起,Windows SDK 不再附带完整的命令行构建环境。

ActiveState Perl

运行构建生成脚本需要 ActiveState Perl。MinGW 或 Cygwin Perl 都无法工作。它还必须出现在 PATH 中。二进制文件可从 https://www.activestate.com 下载(注意:需要 5.8.3 或更高版本,免费的标准发行版即可)。

开始使用时不需要以下附加产品,但构建完整软件包时需要。请使用 config.pl 文件指定各个库所在的目录。

ActiveState TCL

构建 PL/Tcl 需要它(注意:需要 8.4 版本,免费的标准发行版即可)。

BisonFlex

从 Git 构建需要BisonFlex,但从发布文件构建则不需要。只有 Bison 1.875 或 2.2 及以上版本可以工作。Flex必须为 2.5.31 或更高版本。

BisonFlex都包含在msys工具套件中,可从http://www.mingw.org/wiki/MSYS获取,它是MinGW编译器套件的一部分。

除非它们已经在 PATH 中,否则你需要把包含flex.exebison.exe的目录加入buildenv.pl中的 PATH 环境变量。对于 MinGW,该目录是你的 MinGW 安装目录下的\msys\1.0\bin子目录。

Note

来自 GnuWin32 的 Bison 发行版似乎存在一个 bug:如果安装在名称中含有空格的目录中,Bison 就会工作异常,例如英文安装中的默认位置C:\Program Files\GnuWin32。请考虑安装到C:\GnuWin32,或者在 PATH 环境设置中使用指向 GnuWin32 的 NTFS 短文件名路径(例如C:\PROGRA~1\GnuWin32)。

Note

PostgreSQL FTP 站点提供、且旧版文档提及的过时 winflex 二进制文件,在 64 位 Windows 主机上会报错 flex: fatal internal error, exec failed。请改用 MSYS 中的 Flex。

Diff

运行回归测试需要 Diff,可从http://gnuwin32.sourceforge.net下载。

Gettext

构建带有 NLS 支持的版本需要 Gettext,可从http://gnuwin32.sourceforge.net下载。请注意,二进制文件、依赖项以及开发文件都是必需的。

MIT Kerberos

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

libxml2libxslt

XML 支持需要它们。二进制文件可从https://zlatkovic.com/pub/libxml下载,源代码可从http://xmlsoft.org获取。请注意,libxml2 需要 iconv,而它可从相同的下载位置获得。

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下载。

17.1.2. 64 位 Windows 的特殊注意事项

PostgreSQL 在 64 位 Windows 上只会为 x64 架构构建,不支持 Itanium 处理器。

不支持在同一个构建树中混用 32 位和 64 位版本。构建系统会自动检测自己是在 32 位还是 64 位环境中运行,并据此构建 PostgreSQL。因此,在开始构建之前启动正确的命令提示符非常重要。

若要使用服务器端第三方库,例如pythonOpenSSL,该库也必须是 64 位的。不支持在 64 位服务器中加载 32 位库。PostgreSQL 支持的若干第三方库可能仅提供 32 位版本,在这种情况下,它们不能与 64 位 PostgreSQL 一起使用。

17.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(位于源码树根目录)。

17.1.4. 清理和安装

大多数时候,Visual Studio 的自动依赖跟踪都会处理好变更过的文件。但如果变更较大,你可能需要清理安装。要执行此操作,只需运行clean.bat命令,它会自动清除所有生成的文件。你也可以带上dist参数运行它,此时它的行为类似于make distclean,并且也会删除 flex/bison 的输出文件。

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

install c:\destination\directory

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

install c:\destination\directory client

17.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 upgradecheck

要更改所用的测试调度方式(默认为 parallel),请将其追加到命令行,例如:

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 软件包管理器(PPM)的库中。要安装它,请下载以下文件:IPC-Run-<version>.tar.gz,这是 CPAN 提供的源码归档,地址为 https://metacpan.org/release/IPC-Run,然后将其解压。编辑 buildenv.pl 文件,并添加 PERL5LIB 变量,使其指向解压后归档中的 lib 子目录。例如:

$ENV{PERL5LIB}=$ENV{PERL5LIB} . ';c:\IPC-Run-0.94\lib';

部分 TAP 测试依赖一些外部命令,相关测试会根据这些命令是否可用而选择性触发。以下各变量都可以在 buildenv.pl 中设置或取消设置:

GZIP_PROGRAM

指向gzip命令的路径。默认值为gzip,即在PATH中找到的命令。

TAR

指向tar命令的路径。默认值为tar,即在PATH中找到的命令。

17.1.6. 使用 Make 构建文档

将 PostgreSQL 文档构建为 HTML 格式,需要若干工具和文件。请为这些文件创建一个根目录,并将它们存放在下列子目录中。

OpenJade 1.3.1-2

https://sourceforge.net/projects/openjade/files/openjade/1.3.1/openjade-1_3_1-2-bin.zip/download 下载,并解压到子目录 openjade-1.3.1 中。

DocBook DTD 4.2

https://www.oasis-open.org/docbook/sgml/4.2/docbook-4.2.zip 下载,并解压到子目录 docbook 中。

ISO 字符实体

https://www.oasis-open.org/cover/ISOEnts.zip 下载,并解压到子目录 docbook 中。

编辑 buildenv.pl 文件,并添加一个变量来指定根目录的位置,例如:

$ENV{DOCROOT}='c:\docbook';

要构建文档,请运行命令 builddoc.bat。注意,为了生成索引,实际上会构建两次。生成的 HTML 文件位于 doc\src\sgml