本节介绍有关 PostgreSQL 安装和配置的其他平台特定问题。请务必阅读安装说明,特别是第 17.1 节。另外,请参阅第 31 章,了解回归测试结果的解释。
此处未涵盖的平台没有已知的特定平台安装问题。
可以使用 Cygwin(Windows 上的类 Linux 环境)来构建 PostgreSQL,但该方法不如原生 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
目录中。
要在 macOS 上从源代码构建 PostgreSQL,您需要安装 Apple 的命令行开发工具,可以通过发出以下命令来完成:
xcode-select --install
(请注意,这将弹出一个 GUI 对话框以进行确认)。您可能希望安装 Xcode,也可能不希望。
在最近的 macOS 版本中,有必要在用于查找某些系统头文件的 include 开关中嵌入“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 check
之前执行 make install
来解决此问题。不过,大多数 PostgreSQL 开发人员都会关闭 SIP。
可以使用 MinGW(Windows 上的类 Unix 构建环境)来构建 Windows 版 PostgreSQL。建议使用 MSYS2 环境进行此操作,并安装任何必需的软件包。
如果 Windows 上的 PostgreSQL 崩溃,它能够生成 minidumps,这些转储可用于追踪崩溃原因,类似于 Unix 上的核心转储。这些转储可以使用 Windows Debugger Tools 或 Visual Studio 读取。要启用 Windows 上的转储生成,请在集群数据目录中创建一个名为 crashdumps
的子目录。然后,转储将写入此目录,文件名唯一,基于崩溃进程的标识符和崩溃时的当前时间。
PostgreSQL 在 Solaris 上得到了很好的支持。您的操作系统越新,遇到的问题就越少。
您可以使用 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://gnu.ac.cn/prep/ftp。
如果 configure
抱怨测试程序失败,这很可能是运行时链接器无法找到某个库,可能是 libz、libreadline 或其他非标准库(如 libssl)。要将其指向正确的位置,请在 configure
命令行的 LDFLAGS
环境变量中进行设置,例如:
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
有关更多信息,请参阅 ld 手册页。
在 SPARC 架构上,强烈建议使用 Sun Studio 进行编译。尝试使用 -xO5
优化标志来生成显著更快的二进制文件。不要使用任何会修改浮点运算和 errno
处理行为的标志(例如 -fast
)。
如果您没有理由在 SPARC 上使用 64 位二进制文件,请优先选择 32 位版本。64 位操作速度较慢,64 位二进制文件比 32 位变体速度慢。另一方面,AMD64 CPU 系列上的 32 位代码不是原生支持的,因此在该 CPU 系列上 32 位代码速度明显较慢。
是的,可以使用 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。
建议大多数用户下载 Windows 的二进制发行版,该发行版在 PostgreSQL 网站 https://postgresql.ac.cn/download/ 上提供图形安装程序包。从源代码构建仅适用于开发 PostgreSQL 或扩展的人员。
可以使用 Meson 构建 Windows 版 PostgreSQL(如第 17.4 节中所述)。原生 Windows 移植需要 Windows 10 或更高版本的 32 位或 64 位版本。
原生构建的 psql 不支持命令行编辑。Cygwin 构建支持命令行编辑,因此应在需要 psql 在 Windows 上进行交互式使用时使用它。
可以使用 Microsoft 的 Visual C++ 编译器套件构建 PostgreSQL。这些编译器可以来自 Visual Studio、Visual Studio Express 或某些版本的 Microsoft Windows SDK。如果您还没有设置 Visual Studio 环境,最简单的方法是使用 Visual Studio 2022 中的编译器或 Windows SDK 10 中的编译器,它们都可以从 Microsoft 免费下载。
使用 Microsoft 编译器套件可以进行 32 位和 64 位构建。使用 Visual Studio 2015 到 Visual 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 Headers and Libraries”部分。如果您安装的 Windows SDK 包含“Visual C++ Compilers”,则不需要 Visual Studio 即可构建。请注意,从 8.0a 版本开始,Windows SDK 不再附带完整的命令行构建环境。
要在 Windows 上构建 PostgreSQL,还需要以下附加产品:
运行构建生成脚本需要 Strawberry Perl。MinGW 或 Cygwin Perl 不可用。它还必须在 PATH 中。可以从 https://strawberryperl.com 下载二进制文件。
可以从 https://github.com/lexxmark/winflexbison 下载 Bison 和 Flex 的二进制文件。
以下附加产品不是入门所必需的,但构建完整包是必需的:
构建 PL/Tcl 所需。可以从 https://www.magicsplat.com/tcl-installer/index.html 下载二进制文件。
运行回归测试需要 Diff,可以从 http://gnuwin32.sourceforge.net 下载。
构建 NLS 支持需要 Gettext,可以从 http://gnuwin32.sourceforge.net 下载。请注意,需要二进制文件、依赖项和开发文件。
GSSAPI 身份验证支持所需。MIT Kerberos 可从 https://web.mit.edu/Kerberos/dist/index.html 下载。
XML 支持所需。可以从 https://zlatkovic.com/pub/libxml 下载二进制文件,或从 http://xmlsoft.org 下载源代码。请注意,libxml2 需要 iconv,后者可在同一下载位置获得。
支持 LZ4 压缩所需。可以从 https://github.com/lz4/lz4/releases 下载二进制文件和源代码。
支持 Zstandard 压缩所需。可以从 https://github.com/facebook/zstd/releases 下载二进制文件和源代码。
SSL 支持所需。可以从 https://slproweb.com/products/Win32OpenSSL.html 下载二进制文件,或从 https://www.openssl.org 下载源代码。
UUID-OSSP 支持(仅限 contrib)所需。源代码可从 http://www.ossp.org/pkg/lib/uuid/ 下载。
构建 PL/Python 所需。可以从 https://pythonlang.cn 下载二进制文件。
pg_dump 和 pg_restore 中的压缩支持所需。可以从 https://www.zlib.net 下载二进制文件。
PostgreSQL 仅支持在 64 位 Windows 上构建 x64 架构。
不支持在同一个构建树中混合 32 位和 64 位版本。构建系统会自动检测其是在 32 位还是 64 位环境中运行,并相应地构建 PostgreSQL。因此,在构建之前启动正确的命令提示符非常重要。
要使用服务器端的第三方库(如 Python 或 OpenSSL),该库必须也是 64 位。不支持在 64 位服务器中加载 32 位库。PostgreSQL 支持的几个第三方库可能仅提供 32 位版本,在这种情况下,它们不能与 64 位 PostgreSQL 一起使用。
如果 Windows 上的 PostgreSQL 崩溃,它能够生成 minidumps,这些转储可用于追踪崩溃原因,类似于 Unix 上的核心转储。这些转储可以使用 Windows Debugger Tools 或 Visual Studio 读取。要启用 Windows 上的转储生成,请在集群数据目录中创建一个名为 crashdumps
的子目录。然后,转储将写入此目录,文件名唯一,基于崩溃进程的标识符和崩溃时的当前时间。
如果您在文档中发现任何不正确之处、与您实际体验不符或需要进一步澄清的内容,请使用此表格报告文档问题。