Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

17.7. 特定于平台的注释 #

17.7.1. Cygwin
17.7.2. macOS
17.7.3. MinGW
17.7.4. Solaris
17.7.5. Visual Studio

此部分说明了有关 PostgreSQL 安装和设置的附加平台特定问题。务必阅读安装说明,特别是 第 17.1 节。另请查看 第 31 章,了解如何解释回归测试结果。

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

17.7.1. Cygwin #

可以使用 Cygwin(Windows 中的类似 Linux 的环境)来构建 PostgreSQL,但此方法不如本机 Windows 构建,而且不再建议在 Cygwin 下运行服务器。

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

  • 将路径设置为使用 Cygwin bin 目录,然后是 Windows 实用程序。这将有助于解决编译问题。

  • 不支持 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 不一致性。

在执行 configure 时,你也可以通过将 PG_SYSROOT 指定给 configure 来选择一个非默认 sysroot 路径

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

这主要可用于为其他一些 macOS 版本进行交叉编译。无法保证生成的执行程序将会在当前主机上运行。

要完全禁止 -isysroot 选项,请使用以下命令

./configure ... PG_SYSROOT=none

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

macOS系统完整性保护 (SIP) 功能破坏了 make check,因为它阻止将所需设置 DYLD_LIBRARY_PATH 传递到正在测试的执行程序。你可以在 make check 之前执行 make install 来解决该问题。大多数 PostgreSQL 开发人员只是关闭 SIP。

17.7.3. MinGW #

PostgreSQL for Windows 可以使用 MinGW 构建,MinGW 是 Microsoft 操作系统的类 Unix 构建环境。MinGW 构建过程使用本章中描述的常规构建系统。

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

若要使用 MinGW 构建 64 位二进制文件,请从此处安装 64 位工具集:https://mingw-w64.org/,将它的 bin 目录放置在 PATH 中,然后使用 --host=x86_64-w64-mingw32 选项运行 configure

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

17.7.3.1. 收集崩溃转储 #

如果 Windows 上的 PostgreSQL 崩溃,它具备生成 迷你转储 的能力,这些转储可用于跟踪崩溃原因,类似于 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 伴侣光盘中。如果你需要旧版本 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 位代码不是本机代码,因此在该系列 CPU 上,32 位代码会明显变慢。

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 构建适用于 Windows 和 Visual Studio 的 PostgreSQL,详见 第 17.4 节。本地 Windows 端口需要 Windows 10 或更高版本的 32 位或 64 位版本。

本地构建的 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 还需要以下附加产品。

Strawberry Perl

运行构建生成脚本需要 Strawberry Perl。MinGW 或 Cygwin Perl 不可行。且必须存在于 PATH 中。可从 https://strawberryperl.com 下载二进制文件。

BisonFlex

需要 BisonFlex。只有 Bison 版本 2.3 及更高版本才适用。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 环境设置中使用 NTFS 短名称路径到 GnuWin32(例如,C:\PROGRA~1\GnuWin32)。

以下附加产品不是开始时必须的,但在构建完成的软件包时是必需的。

Magicsplat Tcl

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

Diff

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

Gettext

构建 NLS 支持时需要 Gettext,可从 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 支持(仅限于 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 崩溃,它具备生成 迷你转储 的能力,这些转储可用于跟踪崩溃原因,类似于 Unix 上的核心转储。可以使用 Windows 调试工具Visual Studio 读取这些转储。若要在 Windows 上启用转储生成,请在集群数据目录中创建一个名为 crashdumps 的子目录。然后将转储写入此目录,该转储的唯一名称基于崩溃进程的标识符和崩溃的当前时间。