2024年9月26日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4

17.7. 平台特定说明 #

本节记录有关 PostgreSQL 安装和设置的平台特定问题。请务必阅读安装说明,特别是第 17.1 节。此外,请查看第 31 章了解回归测试结果的解释。

此处未涵盖的平台没有已知的平台特定安装问题。

17.7.1. Cygwin #

PostgreSQL 可以使用 Cygwin(Windows 的类 Linux 环境)进行构建,但这种方法不如本机 Windows 构建好,并且不再推荐在 Cygwin 下运行服务器。

从源代码构建时,请按照 Unix 风格的安装过程(即 ./configure; make;等)进行,注意以下 Cygwin 特定的差异

  • 在 Windows 实用程序之前将您的路径设置为使用 Cygwin bin 目录。这将有助于防止编译出现问题。

  • 不支持 adduser 命令;请使用 Windows 上适当的用户管理应用程序。否则,请跳过此步骤。

  • 不支持 su 命令;请使用 ssh 模拟 Windows 上的 su。否则,请跳过此步骤。

  • 不支持 OpenSSL

  • 启动 cygserver 以支持共享内存。为此,请输入命令 /usr/sbin/cygserver &。每次启动 PostgreSQL 服务器或初始化数据库集群 (initdb) 时,该程序都需要运行。默认的 cygserver 配置可能需要更改(例如,增加 SEMMNS)以防止 PostgreSQL 由于缺乏系统资源而失败。

  • 在使用除 C 以外的区域设置的某些系统上,构建可能会失败。要解决此问题,请在构建之前通过执行 export LANG=C.utf8 将区域设置设置为 C,然后在安装 PostgreSQL 后将其设置回之前的设置。

  • 并行回归测试 (make check) 可能会由于 listen() 回退队列溢出而导致虚假的回归测试失败,从而导致连接拒绝错误或挂起。您可以使用 make 变量 MAX_CONNECTIONS 来限制连接数量,因此

    make MAX_CONNECTIONS=5 check
    

    (在某些系统上,您最多可以有大约 10 个同时连接。)

可以将 cygserver 和 PostgreSQL 服务器安装为 Windows NT 服务。有关如何执行此操作的信息,请参阅 Cygwin 上的 PostgreSQL 二进制包中包含的 README 文档。它安装在目录 /usr/share/doc/Cygwin 中。

17.7.2. macOS #

要在 macOS 上从源代码构建 PostgreSQL,您需要安装 Apple 的命令行开发者工具,这可以通过发出以下命令来完成

xcode-select --install

(注意这将弹出一个 GUI 对话框以供确认)。您可能希望也可能不希望安装 Xcode。

在最近的 macOS 版本中,有必要在用于查找某些系统头文件的包含开关中嵌入 sysroot 路径。这会导致 configure 脚本的输出因 configure 期间使用的 SDK 版本而异。在简单情况下,这不会造成任何问题,但如果您尝试执行类似于在与服务器代码构建不同的机器上构建扩展的操作,您可能需要强制使用不同的 sysroot 路径。为此,请设置 PG_SYSROOT,例如

make PG_SYSROOT=/desired/path all

要找出您机器上的适当路径,请运行

xcrun --show-sdk-path

请注意,使用与构建核心服务器时不同的 sysroot 版本构建扩展并不真正推荐;在最坏的情况下,它可能导致难以调试的 ABI 不一致。

您也可以在配置时选择非默认的 sysroot 路径,方法是将 PG_SYSROOT 指定给 configure

./configure ... PG_SYSROOT=/desired/path

这主要用于为某些其他 macOS 版本交叉编译。不能保证生成的二进制文件将在当前主机上运行。

要完全抑制 -isysroot 选项,请使用

./configure ... PG_SYSROOT=none

(任何不存在的文件名都可以)。如果您希望使用非 Apple 编译器进行构建,这可能很有用,但请注意,PostgreSQL 开发人员没有测试或支持这种情况。

macOS系统完整性保护 (SIP) 功能会破坏 make check,因为它会阻止将 DYLD_LIBRARY_PATH 的必要设置传递给正在测试的二进制文件。您可以通过执行 make install 然后再执行 make check 来解决此问题。大多数 PostgreSQL 开发人员只是关闭了 SIP。

17.7.3. MinGW #

用于 Windows 的 PostgreSQL 可以使用 MinGW(Microsoft 操作系统的类 Unix 构建环境)进行构建。MinGW 构建过程使用本章中描述的正常构建系统。

MinGW(类 Unix 构建工具)和 MSYS(运行 shell 脚本(如 configure)所需的 Unix 工具集合)可以从 http://www.mingw.org/ 下载。两者都不需要运行生成的二进制文件;它们仅用于创建二进制文件。

要使用 MinGW 构建 64 位二进制文件,请从 https://mingw-w64.org/ 安装 64 位工具集,将其 bin 目录放入 PATH 中,并使用 --host=x86_64-w64-mingw32 选项运行 configure

安装完所有内容后,建议您在 CMD.EXE 下运行 psql,因为 MSYS 控制台存在缓冲问题。

17.7.3.1. 收集崩溃转储 #

如果 Windows 上的 PostgreSQL 崩溃,它有能力生成 minidumps,这些转储可用于追踪崩溃的原因,类似于 Unix 上的核心转储。可以使用 Windows 调试工具Visual Studio 阅读这些转储。要在 Windows 上启用转储生成,请在集群数据目录中创建一个名为 crashdumps 的子目录。然后将转储写入该目录,并使用崩溃进程的标识符和崩溃时的当前时间生成唯一名称。

17.7.4. Solaris #

PostgreSQL 在 Solaris 上得到了良好的支持。您的操作系统越新,您遇到的问题就越少。

17.7.4.1. 所需工具 #

您可以使用 GCC 或 Sun 的编译器套件进行构建。为了获得更好的代码优化,强烈建议在 SPARC 架构上使用 Sun 的编译器。如果您使用 Sun 的编译器,请注意不要选择 /usr/ucb/cc;请使用 /opt/SUNWspro/bin/cc

您可以从 https://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/ 下载 Sun Studio。许多 GNU 工具已集成到 Solaris 10 中,或者它们存在于 Solaris 附带的 CD 上。如果您需要旧版本 Solaris 的软件包,您可以在 http://www.sunfreeware.com 找到这些工具。如果您更喜欢源代码,请查看 https://www.gnu.org/prep/ftp

17.7.4.2. configure 抱怨测试程序失败 #

如果 configure 抱怨测试程序失败,这可能是运行时链接器无法找到某些库(可能是 libz、libreadline 或其他一些非标准库,例如 libssl)的情况。要将其指向正确的位置,请在 configure 命令行上设置 LDFLAGS 环境变量,例如

configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"

有关更多信息,请参阅 ld 手册页。

17.7.4.3. 编译以获得最佳性能 #

在 SPARC 架构上,强烈建议使用 Sun Studio 进行编译。尝试使用 -xO5 优化标志生成速度明显更快的二进制文件。不要使用任何修改浮点运算和 errno 处理行为的标志(例如,-fast)。

如果您没有理由在 SPARC 上使用 64 位二进制文件,请优先使用 32 位版本。64 位操作速度较慢,64 位二进制文件比 32 位变体速度慢。另一方面,AMD64 CPU 系列上的 32 位代码不是本机的,因此 32 位代码在该 CPU 系列上的速度明显慢。

17.7.4.4. 使用 DTrace 跟踪 PostgreSQL #

是的,可以使用 DTrace。有关更多信息,请参见第 27.5 节

如果您看到 postgres 可执行文件的链接中止,并出现类似以下的错误消息

Undefined                       first referenced
 symbol                             in file
AbortTransaction                    utils/probes.o
CommitTransaction                   utils/probes.o
ld: fatal: Symbol referencing errors. No output written to postgres
collect2: ld returned 1 exit status
make: *** [postgres] Error 1

您的 DTrace 安装版本过旧,无法处理静态函数中的探测器。您需要 Solaris 10u4 或更高版本才能使用 DTrace。

17.7.5. Visual Studio #

建议大多数用户下载适用于 Windows 的二进制发行版,该发行版以图形安装包的形式从 PostgreSQL 网站 https://postgresql.ac.cn/download/ 获取。从源代码构建仅适用于开发 PostgreSQL 或扩展的人员。

可以使用 Meson 构建带有 Visual Studio 的 Windows 版 PostgreSQL,如 第 17.4 节 中所述。本机 Windows 端口需要 32 位或 64 位版本的 Windows 10 或更高版本。

psql 的本机构建不支持命令行编辑。 Cygwin 构建支持命令行编辑,因此应该在 Windows 上需要 psql 进行交互式使用时使用它。

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

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

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

您必须始终包含 SDK 的 Windows 头文件和库 部分。如果您安装了包含 Visual C++ 编译器Windows SDK,则无需 Visual Studio 即可构建。请注意,从 8.0a 版开始,Windows SDK 不再附带完整的命令行构建环境。

17.7.5.1. 要求 #

构建 Windows 版 PostgreSQL 需要以下附加产品。

ActiveState Perl

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

BisonFlex

需要 BisonFlex。只有 2.3 及更高版本的 Bison 才能正常工作。 Flex 必须是 2.5.35 或更高版本。

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

您需要将包含 flex.exebison.exe 的目录添加到 PATH 环境变量中。对于 MinGW,该目录是 MinGW 安装目录的 \msys\1.0\bin 子目录。

注意

来自 GnuWin32 的 Bison 发行版似乎存在一个错误,导致 Bison 在安装到名称中包含空格的目录时出现故障,例如英文安装中的默认位置 C:\Program Files\GnuWin32。考虑安装到 C:\GnuWin32 或在 PATH 环境设置中使用指向 GnuWin32 的 NTFS 短名称路径(例如,C:\PROGRA~1\GnuWin32)。

以下附加产品不是开始必需的,但构建完整软件包需要这些产品。

ActiveState Tcl

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

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。

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 支持所需(仅限 contrib)。可以从 http://www.ossp.org/pkg/lib/uuid/ 下载源代码。

Python

构建 PL/Python 所需。可以从 https://www.pythonlang.cn 下载二进制文件。

zlib

pg_dumppg_restore 中的压缩支持所需。可以从 https://www.zlib.net 下载二进制文件。

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

PostgreSQL 仅在 64 位 Windows 上为 x64 架构构建。

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

要使用服务器端第三方库(如 PythonOpenSSL),此库 必须 也是 64 位的。不支持在 64 位服务器中加载 32 位库。PostgreSQL 支持的几个第三方库可能只有 32 位版本,在这种情况下,它们不能与 64 位 PostgreSQL 一起使用。

17.7.5.3. 收集崩溃转储 #

如果 Windows 上的 PostgreSQL 崩溃,它有能力生成 minidumps,这些转储可用于追踪崩溃的原因,类似于 Unix 上的核心转储。可以使用 Windows 调试工具Visual Studio 阅读这些转储。要在 Windows 上启用转储生成,请在集群数据目录中创建一个名为 crashdumps 的子目录。然后将转储写入该目录,并使用崩溃进程的标识符和崩溃时的当前时间生成唯一名称。

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表格 报告文档问题。