↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 16 / 15 / 14
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0

第 18 章 在 Windows 上从源代码安装

建议大多数用户下载适用于 Windows 的二进制发行版,该发行版以图形化安装程序包的形式提供,可从 PostgreSQL 网站获取:https://www.postgresql.org/download/。从源码构建仅面向开发 PostgreSQL 或扩展的人员。

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

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

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

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

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

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

使用 Microsoft 编译器套件既可以构建 32 位版本,也可以构建 64 位版本。32 位 PostgreSQL 可以使用 Visual Studio 2013 到 Visual Studio 2026 构建,也可以使用独立发布的 Windows SDK 8.1a 到 10 版本。64 位 PostgreSQL 支持使用 8.1a 到 10 版本的 Microsoft Windows SDK 或 Visual Studio 2013 及以上版本构建。使用 Visual Studio 2013 到 Visual Studio 2026 构建时,编译最低支持到 Windows 7 和 Windows Server 2008 R2 SP1。

使用 Visual C++或 Platform SDK 构建所需的工具位于 src\tools\msvc 目录中。构建时,请确保系统 PATH 中没有来自 MinGW 或 Cygwin 的工具。同时,也要确保所需的 Visual C++ 工具都已在 PATH 中可用。在 Visual Studio 中,启动 Visual Studio Command Prompt。如果你想构建 64 位版本,就必须使用 64 位版本的命令提示符,反之亦然。从 Visual Studio 2017 开始,可以在命令行中使用 VsDevCmd.bat 来完成这件事,可用选项及其默认值见 -help。vsvars32.bat 在 Visual Studio 2015 及更早版本中可用于同样目的。在 Visual Studio Command Prompt 中,你可以使用 vcvarsall.bat 命令更改目标 CPU 架构、构建类型以及目标操作系统,例如使用 vcvarsall.bat x64 10.0.10240.0 来面向 Windows 10 进行 64 位发行版构建。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 的文件,并将所需命令放入其中。例如,如果 bison 不在 PATH 中,可以创建一个包含以下内容的文件,以将其路径加入 PATH:

$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 部分。如果你安装的 Windows SDK 包含 Visual C++ Compilers,则无需 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 下载。

Bison 和 Flex

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

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

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

注意

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

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

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

18.1.2. 64 位 Windows 的特殊注意事项 #

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

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

如果要使用服务器端第三方库,例如 Python 或 OpenSSL,那么该库也必须是 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 的输出文件。

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

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

若要更改所使用的调度(默认为 parallel),可像下面这样将其追加到命令行:

vcregress check serial

vcregress taptest 可用于运行某个目标目录的 TAP 测试,例如:

vcregress taptest src\bin\initdb\

有关回归测试的更多信息,请参见第 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';

使用 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 中搜索该名称的命令。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.