17.7. 平台相关说明 #
本节记录 PostgreSQL 安装和设置时的一些平台相关附加问题。请务必阅读安装说明,尤其是第 17.1 节。此外,也请参阅第 31 章中关于如何解释回归测试结果的说明。
这里未列出的平台,目前没有已知的平台特定安装问题。
17.7.1. AIX #
在 AIX 上构建 PostgreSQL
时必须使用 GCC。原生 IBM 编译器 xlc 不受支持。
此外,只支持 64 位构建。虽然基于 make 的构建系统会自动创建 64 位可执行文件和库,但 meson 构建系统要求你在构建前设置 OBJECT_MODE:
export OBJECT_MODE=64 meson setup ...
如果不这样做,通常会看到 ar 报告文件具有错误的目标文件模式。
AIX 7.2 之前的版本已不再由 PostgreSQL 社区测试或支持。
17.7.2. Cygwin #
可以使用 Cygwin 这个 Windows 上的类 Linux 环境来构建 PostgreSQL,但这种方式不如原生 Windows 构建,且如今已不再推荐在 Cygwin 下运行服务器。
从源代码构建时,请按照 Unix 风格的安装过程(也就是
./configure;
make;等等)进行,但要注意下列 Cygwin 特有的差异:
请把路径设置成优先使用 Cygwin 的 bin 目录,而不是 Windows 工具目录。这有助于避免编译问题。
不支持
adduser命令;请使用 Windows 中相应的用户管理应用。也可以跳过这一步。不支持
su命令;请在 Windows 上使用 ssh 来模拟 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.3. 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 不一致。
你也可以在配置时通过向 configure 指定
PG_SYSROOT,选择非默认的 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.4. MinGW #
可以使用 MinGW 这个 Windows 上的类 Unix 构建环境来构建 Windows 版 PostgreSQL。推荐为此使用 MSYS2 环境,并安装所需的前置软件包。
17.7.4.1. 收集崩溃转储 #
如果 PostgreSQL 在 Windows 上崩溃,它能够生成
minidumps,可用于追踪崩溃原因,类似于 Unix 上的核心转储。这些转储可以使用
Windows Debugger Tools 或
Visual Studio 读取。要在 Windows 上启用转储生成,请在集簇数据目录中创建一个名为
crashdumps 的子目录。随后,转储会以唯一名称写入该目录,该名称基于崩溃进程的标识符以及崩溃发生时的当前时间。
17.7.5. Solaris #
PostgreSQL 在 Solaris 上有良好支持。你的操作系统越新,遇到的问题通常越少。
17.7.5.2. configure 报告测试程序失败 #
如果 configure 报告某个测试程序失败,这多半是因为运行时链接器找不到某些库,通常是 libz、libreadline,或其他非标准库如 libssl。要把它指向正确位置,请在
configure 命令行中设置环境变量 LDFLAGS,例如:
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
更多信息请参见 ld 手册页。
17.7.6. Visual Studio #
建议大多数用户下载适用于 Windows 的二进制发行版,该发行版以图形化安装程序包的形式提供,可从 PostgreSQL 网站获取:https://www.postgresql.org/download/。从源码构建仅面向开发 PostgreSQL 或扩展的人员。
Windows 上配合 Visual Studio 的 PostgreSQL 可以使用 Meson 构建,如第 17.4 节所述。原生 Windows 移植要求 Windows 10 或更高版本的 32 位或 64 位系统。
原生构建的 psql 不支持命令行编辑。Cygwin 构建支持命令行编辑,因此如果需要在 Windows 上交互式使用 psql,应当使用它。
PostgreSQL 可以使用 Microsoft 的 Visual C++ 编译器套件构建。这些编译器可以来自 Visual Studio、Visual Studio Express,或某些版本的 Microsoft Windows SDK。如果你还没有搭建好 Visual Studio 环境,最简单的办法是使用 Visual Studio 2022 中的编译器,或者 Windows SDK 10 中的编译器;它们都可以从 Microsoft 免费下载。
Microsoft 编译器套件既可以进行 32 位构建,也可以进行 64 位构建。32 位 PostgreSQL 可使用 Visual Studio 2019 到 Visual Studio 2022 构建,也可使用独立发布的 Windows SDK 10 及更高版本。64 位 PostgreSQL 构建则支持 Microsoft Windows SDK 10 及更高版本,或 Visual Studio 2019 及更高版本。
如果你的构建环境没有附带受支持版本的 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 已不再附带完整的命令行构建环境。
17.7.6.1. 需求 #
在 Windows 上构建 PostgreSQL 还需要下列附加产品。
- Strawberry Perl
运行构建生成脚本需要 Strawberry Perl。MinGW Perl 或 Cygwin Perl 都不行。它还必须位于 PATH 中。二进制文件可从 https://strawberryperl.com 下载。
- Bison 和 Flex
Bison 和 Flex 的二进制文件可以从 https://github.com/lexxmark/winflexbison 下载。
下列附加产品虽然不是开始构建所必需的,但要构建完整软件包则需要它们。
- 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 下载。
- 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 下载。
17.7.6.2. 64 位 Windows 的特殊注意事项 #
PostgreSQL 在 64 位 Windows 上只能构建为 x64 和 AArch64 架构。
不支持在同一个构建树中混用 32 位和 64 位版本。构建系统会自动检测自己是在 32 位还是 64 位环境中运行,并据此构建 PostgreSQL。因此,在开始构建之前启动正确的命令提示符非常重要。
如果要使用服务器端第三方库,例如 Python 或 OpenSSL,那么该库也必须是 64 位的。64 位服务器不支持加载 32 位库。PostgreSQL 支持的若干第三方库可能只提供 32 位版本,在这种情况下,它们无法与 64 位 PostgreSQL 一起使用。
17.7.6.3. 收集崩溃转储 #
如果 PostgreSQL 在 Windows 上崩溃,它能够生成
minidumps,可用于追踪崩溃原因,类似于 Unix 上的核心转储。这些转储可以使用
Windows Debugger Tools 或
Visual Studio 读取。要在 Windows 上启用转储生成,请在集簇数据目录中创建一个名为
crashdumps 的子目录。随后,转储会以唯一名称写入该目录,该名称基于崩溃进程的标识符以及崩溃发生时的当前时间。