9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(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 安装和设置的附加平台相关的话题。确保阅读安装指导,特别是Section 17.1。 同样,检查关于回归测试结果解释的Chapter 31

这里没有覆盖的平台不存在平台相关的安装问题。

17.7.1. Cygwin #

PostgreSQL 可以使用 Cygwin(一个类似 Linux 的 Windows 环境)构建, 但该方法不如原生 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 路径嵌入用于查找某些系统头文件的include选项中。这导致configure 脚本的输出会有所不同,具体取决于在configure期间使用的SDK版本。 在简单的情况下,这应该不会造成任何问题,但是,如果您要尝试在与构建服务器代码不同 的计算机上构建扩展程序,则可能需要强制使用其他sysroot路径。为此,需要设置 PG_SYSROOT,例如:

make PG_SYSROOT=/desired/path all

要在您的计算机上找到合适的路径,请运行

xcrun --show-sdk-path

请注意,实际上不建议使用与构建核心服务器不同的sysroot版本构建扩展。 在最坏的情况下,它可能导致难以调试的ABI不一致。

您还可以在配置时选择非默认的sysroot路径,通过在 configure中指定PG_SYSROOT

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

这主要是对其他一些macOS版本进行交叉编译的时候有用。 不能保证产生的可执行文件能在当前主机上运行。

要完全禁止该选项-isysroot,使用

./configure ... PG_SYSROOT=none

(任何不存在的路径名都可以使用)。 如果你想用一个非苹果的编译器来构建,这可能是有用的,但要注意这种情况没有被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的构建工具,以及MSYS,一组运行shell脚本所需的Unix工具, 如configure,可以从http://www.mingw.org/下载。 运行生成的二进制文件不需要它们;它们仅用于创建二进制文件。

要使用 MinGW 编译 64 位二进制,从http://mingw-w64.sourceforge.net/安装 64 位工具。把它放在PATH中的 bin 目录,并且使用--host=x86_64-w64-mingw32选项运行configure.

在你安装完所有的东西之后,我们建议你在CMD.EXE下运行psql,因为 MSYS 控制台有缓冲问题。

17.7.3.1. 收集崩溃转储 #

如果 PostgreSQL 在 Windows 上崩溃,它有能力产生minidumps,这可以被用来追踪崩溃发生的原因,这与 Unix 上的核心转储相似。这些转储可以被使用Windows Debugger ToolsVisual 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 companion 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 位代码不是原生的,所以在那个 CPU 族中 32 位代码要明显地更慢。

17.7.4.4. 用 DTrace 来跟踪 PostgreSQL #

是的,可以使用 DTrace。详见Section 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://www.postgresql.org/download/ 获取。仅建议开发 PostgreSQL 或扩展的人士从源代码构建。

可以使用 Meson 构建带有 Visual Studio 的 Windows 版 PostgreSQL,详见 Section 17.4。 原生 Windows 版本要求 Windows 10 或更高版本的 32 位或 64 位系统。

Native builds of psql don't support command line editing. The Cygwin build does support command line editing, so it should be used where psql is needed for interactive use on Windows.

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

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

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

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

17.7.5.1. 要求 #

构建 PostgreSQL 在 Windows 上需要以下额外产品。

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 子目录。

Note

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

以下附加产品不是入门所必需的,但构建完整软件包时是必需的。

Magicsplat Tcl

构建PL/Tcl所必需。 可从以下网址下载二进制文件: https://www.magicsplat.com/tcl-installer/index.html

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

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. 收集崩溃转储 #

如果 PostgreSQL 在 Windows 上崩溃,它有能力产生minidumps,这可以被用来追踪崩溃发生的原因,这与 Unix 上的核心转储相似。这些转储可以被使用Windows Debugger ToolsVisual Studio读取。要启用在 Windows 上的转储生成,可在集簇数据目录下创建一个名为crashdumps的子目录。转储将被写入到这个目录,转储的名字基于崩溃进程的标识符和崩溃的当前时间来确定。