本节记录 PostgreSQL 安装和设置时的一些平台相关附加问题。 请务必阅读安装说明,尤其是 Section 17.1。 此外,也请参阅 Chapter 31 中关于如何解释回归测试结果的说明。
这里未列出的平台,目前没有已知的平台特定安装问题。
可以使用 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() backlog 队列溢出而产生伪造的回归测试失败, 进而导致连接拒绝错误或挂起。你可以像下面这样使用 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 版本中,需要把 “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 的 “System Integrity Protection”(SIP)特性会破坏 make check,因为它会阻止把所需的 DYLD_LIBRARY_PATH 设置传递给被测试的可执行文件。 你可以通过在 make check 之前先执行 make install 来绕过这一点。不过,大多数 PostgreSQL 开发者会直接关闭 SIP。
可以使用 MinGW 这个 Windows 上的类 Unix 构建环境来构建 Windows 版 PostgreSQL。推荐为此使用 MSYS2 环境,并安装所需的前置软件包。
如果 PostgreSQL 在 Windows 上崩溃,它能够生成 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 companion CD 中。如果你需要适用于较旧 Solaris 版本的 软件包,可以到 http://www.sunfreeware.com 查找这些工具。 如果你更想要源码,请看 https://www.gnu.org/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 位代码并不是原生模式, 因此 32 位代码在该 CPU 家族上会明显更慢。
是的,可以使用 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。
建议大多数用户直接下载 Windows 的二进制发行版,它以图形化安装程序的形式发布在 PostgreSQL 网站上: https://www.postgresql.org/download/。 从源代码构建只适合开发 PostgreSQL 或扩展的人。
Windows 上配合 Visual Studio 的 PostgreSQL 可以使用 Meson 构建, 如 Section 17.4 所述。 原生 Windows 移植要求 Windows 10 或更高版本的 32 位或 64 位系统。
原生构建的 psql 不支持命令行编辑。 Cygwin 构建支持命令行编辑,因此如果需要在 Windows 上交互式使用 psql, 应使用 Cygwin 构建。
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 2015 到 Visual 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 Headers and Libraries 部分。 如果你安装的 Windows SDK 包含 Visual C++ Compilers,那么即使没有 Visual Studio 也可以完成构建。 请注意,自 8.0a 版本起,Windows SDK 已不再附带完整的命令行构建环境。
在 Windows 上构建 PostgreSQL 还需要下列附加产品。
运行构建生成脚本需要 Strawberry Perl。MinGW Perl 或 Cygwin Perl 都不行。 它还必须位于 PATH 中。二进制文件可从 https://strawberryperl.com 下载。
Bison 和 Flex 的二进制文件可以从 https://github.com/lexxmark/winflexbison 下载。
下列附加产品虽然不是开始构建所必需的,但要构建完整软件包则需要它们。
构建 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://www.python.org 下载。
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 一起使用。
如果 PostgreSQL 在 Windows 上崩溃,它能够生成 minidumps,可用于追踪崩溃原因, 类似于 Unix 上的核心转储。这些转储可以使用 Windows Debugger Tools 或 Visual Studio 读取。 要在 Windows 上启用转储生成,请在集簇数据目录中创建一个名为 crashdumps 的子目录。随后,转储会以唯一名称写入该目录, 该名称基于崩溃进程的标识符以及崩溃发生时的当前时间。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。