Postgresql 中文操作指南

17.4. Building and Installation with Meson #

17.4.1. Short Version #

meson setup build --prefix=/usr/local/pgsql
cd build
ninja
su
ninja install
adduser postgres
mkdir -p /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

长版本是本节的其余部分。

17.4.2. Installation Procedure #

Note

如果您正在升级现有系统,请务必阅读 Section 19.6,其中包含有关升级集群的说明。

*Uninstallation: * 要撤销安装,您可以使用 ninja uninstall 命令。

*Cleaning: * 安装之后,您可以通过使用 ninja clean 命令从源树中移除构建文件来释放磁盘空间。

17.4.3. meson setup Options #

meson setup 的命令行选项如下所述。此列表并非详尽(使用 meson configure --help 获取詳尽列表)。此处未介绍的选项用于高级用例,并在标准 Meson documentation 中进行记录。这些参数也可以与 meson setup 一起使用。

17.4.3.1. Installation Locations #

这些选项控制了 ninja install (或 meson install)将把文件放在何处。—​prefix 选项(例如 Section 17.4.1)对于大多数情况来说已经足够。如果你有特殊需求,你可以使用本节中描述的其他选项自定义安装子目录。但请注意,更改不同子目录的相对位置可能会使安装不可重定位,这意味着你无法在安装后移动它。(mandoc 位置不受此限制影响。)对于可重定位安装,你可能需要使用稍后描述的 -Drpath=false 选项。

  • —​prefix=_PREFIX_ #

    • PREFIX 下的所有文件安装在 /usr/local/pgsql 而不是(在基于 Unix 的系统上) _current drive letter :/usr/local/pgsql_(在 Windows 上)。实际文件将被安装到各种子目录中;不会直接向 PREFIX 目录安装任何文件。

  • —​bindir=_DIRECTORY_ #

    • 指定可执行程序的目录。默认值为 _PREFIX /bin_。

  • —​sysconfdir=_DIRECTORY_ #

    • 设置各种配置文件的目录,默认值为 _PREFIX /etc_。

  • —​libdir=_DIRECTORY_ #

    • 设置安装库和可动态加载模块的位置。默认值为 _PREFIX /lib_。

  • —​includedir=_DIRECTORY_ #

    • 设置安装 C 和 C++ 头文件的目录。默认值为 _PREFIX /include_。

  • —​datadir=_DIRECTORY_ #

    • 设置已安装程序使用的只读数据文件的目录。默认值为 _PREFIX /share_。请注意,此设置与数据库文件的位置无关。

  • —​localedir=_DIRECTORY_ #

    • 设置安装语言环境数据(尤其是消息翻译目录文件)的目录。默认值为 _DATADIR /locale_。

  • —​mandir=_DIRECTORY_ #

    • 随 PostgreSQL 提供的手册页将安装在此目录下,位于各自的 man_x subdirectories. The default is DATADIR /man_ 中。

Note

我们煞费苦心,才使得 PostgreSQL 能够安装在共享安装位置(例如 /usr/local/include)中,而不会干扰系统中其他部分的名称空间。首先,字符串“/postgresql”将自动追加到 datadirsysconfdirdocdir,除非展开的完整目录名中已经包含字符串“postgres”或“pgsql”。例如,如果你选择 /usr/local 作为前缀,则文档将安装到 /usr/local/doc/postgresql 中,但如果前缀是 /opt/postgres,则该文档将位于 /opt/postgres/doc 中。客户端接口的公用 C 头文件将被安装到 includedir 中,并且是名称空间清除的。内部头文件和服务器头文件则安装到 includedir 下的私有目录中。请参阅各个接口的文档,以了解有关如何访问其头文件的信息。最后,在适当的情况下,还将在 libdir 下创建一个私有子目录,用于可动态加载的模块。

17.4.3.2. PostgreSQL Features #

本节中描述的选项可用于构建各种可选 PostgreSQL 功能。其中大多数需要其他软件,如 Section 17.1 中所述,并且如果找到所需的软件,它们将自动启用。你可以通过手动将这些功能设置为 enabled 以要求它们或设置为 disabled 以不使用它们来更改此行为。

要指定 PostgreSQL 特定选项,选项的名称必须冠以 -D

  • -Dnls={ auto | enabled | disabled } #

    • 启用或禁用本机语言支持 (NLS),即用英语以外的语言显示程序消息的能力。默认为自动,如果发现 Gettext API 的实现,将自动启用。

  • -Dplperl={ auto | enabled | disabled } #

    • 构建 PL/Perl 服务器端语言。默认为自动。

  • -Dplpython={ auto | enabled | disabled } #

    • 构建 PL/Python 服务器端语言。默认为自动。

  • -Dpltcl={ auto | enabled | disabled } #

    • 使用服务器端的 PL/Tcl 语言进行构建。默认设置为 auto。

  • -Dtcl_version=_TCL_VERSION_ #

    • 指定构建 PL/Tcl 时使用的 Tcl 版本。

  • -Dicu={ auto | enabled | disabled } #

    • 使用 ICU 库提供支持,让用户可以利用 ICU 归类功能(请参阅 Section 24.2)。默认为自动,需要安装 ICU4C 软件包。当前所需的 ICU4C 最低版本为 4.2。默认情况下已禁用。

  • -Dllvm={ auto | enabled | disabled } #

    • 使用 LLVM 的 JIT 编译提供支持(请参阅 Chapter 32)。这需要安装 LLVM 库。当前所需的 LLVM 最低版本为 3.9。默认禁用。

    • llvm-config 将用于查找所需的编译选项。llvm-config,然后对于所有支持的版本查找 llvm-config-$version,将于 PATH 中搜索。如果这未生成所需的程序,请使用 LLVM_CONFIG 指定正确的 llvm-config 路径。

  • -Dlz4={ auto | enabled | disabled } #

    • 使用 LZ4 压缩支持进行构建。默认设置为 auto。

  • -Dzstd={ auto | enabled | disabled } #

    • 使用 Zstandard 压缩支持进行构建。默认设置为 auto。

  • -Dssl={ auto | _LIBRARY }_ #

    • 使用支持 SSL(加密)连接进行构建。支持的唯一 LIBRARYopenssl。这需要安装 OpenSSL 软件包。使用它进行构建将检查所需的标头文件和库,以确保在继续之前 OpenSSL 安装已足够。此选项的默认设置是 auto。

  • -Dgssapi={ auto | enabled | disabled } #

    • 使用支持 GSSAPI 身份验证进行构建。必须安装 MIT Kerberos,才能安装 GSSAPI。在许多系统上,GSSAPI 系统(MIT Kerberos 安装的一部分)不会安装在默认情况下进行搜索的位置(例如,/usr/include/usr/lib)。在这些情况下,PostgreSQL 将查询 pkg-config 以检测所需的编译器和链接器选项。默认设置为 auto。meson configure 将检查所需的标头文件和库,以确保在继续之前 GSSAPI 安装已足够。

  • -Dldap={ auto | enabled | disabled } #

    • 添加 LDAP 支持以进行身份验证和连接参数查找(请参阅 Section 34.18Section 21.10 了解更多信息)。在 Unix 上,这需要安装 OpenLDAP 软件包。在 Windows 上,使用默认的 WinLDAP 库。默认为自动。meson configure 将检查所需的标头文件和库,以确保在继续之前你的 OpenLDAP 安装是否足够。

  • -Dpam={ auto | enabled | disabled } #

    • 使用 PAM(可插入身份验证模块)支持进行构建。默认设置为 auto。

  • -Dbsd_auth={ auto | enabled | disabled } #

    • 使用 BSD 身份验证支持进行构建。(BSD 身份验证框架当前仅可在 OpenBSD 上使用。)默认设置为 auto。

  • -Dsystemd={ auto | enabled | disabled } #

    • 使用 systemd 服务通知构建支持。如果服务器在 systemd 下启动,这会有助于改善集成,但除此以外没有其他影响;请参阅 Section 19.3 了解更多信息。默认为自动。需要安装 libsystemd 及其关联的标头文件才能使用此选项。

  • -Dbonjour={ auto | enabled | disabled } #

    • 使用对 Bonjour 自动服务发现的支持进行构建。默认设置为 auto,并且需要操作系统中的 Bonjour 支持。建议在 macOS 上使用。

  • -Duuid=_LIBRARY_ #

    • 使用指定的 UUID 库构建 uuid-ossp 模块(它提供用于生成 UUID 的函数)。 LIBRARY 必须为以下之一:

  • -Dlibxml={ auto | enabled | disabled } #

    • 使用 libxml2 进行构建,启用 SQL/XML 支持。默认设置为 auto。此特性要求使用 Libxml2 版本 2.6.23 或更高版本。

    • 要使用位于不寻常位置的 libxml2 安装,您可以设置 pkg-config 相关的环境变量(请参阅其文档)。

  • -Dlibxslt={ auto | enabled | disabled } #

    • 使用 libxslt 构建,让 xml2 模块能够对 XML 执行 XSL 转换。还必须指定 -Dlibxml。默认为自动。

17.4.3.3. Anti-Features #

  • -Dreadline={ auto | enabled | disabled } #

    • 允许使用 Readline 库(以及 libedit)。此选项的默认设置是 auto,并且在 psql 中启用命令行编辑和历史记录,强烈建议使用。

  • -Dlibedit_preferred={ true | false } #

    • 将此项设置为真有利于使用 BSD 许可的 libedit 库,而不是 GPL 许可的 Readline。如果已安装这两个库,此选项才重要;默认值为 false,即使用 Readline。

  • -Dzlib={ auto | enabled | disabled } #

    • 启用 Zlib 库的使用。默认设置为 auto,并启用对 pg_dump、pg_restore 和 pg_basebackup 中压缩归档的支持,建议使用。

  • -Dspinlocks={ true | false } #

    • 默认情况下,此选项设置为真;即使 PostgreSQL 没有平台的 CPU 自旋锁支持,将其设置为假也会使构建成功。缺乏自旋锁支持会导致性能非常差;因此,只有当构建中止并告知你平台缺乏自旋锁支持时,才应更改此选项。如果在你的平台上构建 PostgreSQL 需要将此选项设置为假,请向 PostgreSQL 开发人员报告此问题。

  • -Datomics={ true | false } #

    • 默认情况下,此选项设置为真;将其设置为假将禁用 CPU 原子操作。对于缺乏此类操作的平台,此选项不起作用。对于有此操作的平台,禁用原子操作将导致性能下降。更改此选项仅对调试或进行性能比较有用。

17.4.3.4. Build Process Details #

  • —​auto_features={ auto | enabled | disabled } #

    • 设置此选项允许你覆盖所有 “auto” 功能的值(如果找到所需的软件,则自动启用的功能)。当你想一次禁用或启用所有 “可选” 功能而不必手动设置每个功能时,这可能很有用。此参数的默认值为 auto。

  • —​backend=_BACKEND_ #

    • 默认后端 Meson 使用的是 ninja,对于大多数使用情况来说,这足够了。不过,如果你想完全集成 Visual Studio,你可以将 BACKEND 设置为 vs

  • -Dc_args=_OPTIONS_ #

    • 此选项可用于向 C 编译器传递其他选项。

  • -Dc_link_args=_OPTIONS_ #

    • 此选项可用于向 C 链接器传递其他选项。

  • -Dextra_include_dirs=_DIRECTORIES_ #

    • DIRECTORIES 是一个用逗号分隔的目录列表,它将被添加到编译器搜索头文件时的目录列表中。如果你已在非标准位置安装了可选包(如 GNU Readline),你必须使用此选项以及可能还有相应的 -Dextra_lib_dirs 选项。

    • Example: -Dextra_include_dirs=/opt/gnu/include,/usr/sup/include.

  • -Dextra_lib_dirs=_DIRECTORIES_ #

    • DIRECTORIES 是一个用逗号分隔的目录列表,用于搜索库。如果你已在非标准位置安装了包,你可能需要使用此选项(以及相应的 -Dextra_include_dirs 选项)。

    • Example: -Dextra_lib_dirs=/opt/gnu/lib,/usr/sup/lib.

  • -Dsystem_tzdata=_DIRECTORY_ #

    • PostgreSQL 包含它自己的时区数据库,它需要这些数据库进行日期和时间操作。实际上,此时区数据库与 FreeBSD、Linux 和 Solaris 等许多操作系统提供的 IANA 时区数据库兼容,因此再次安装它将是多余的。使用此选项时,将使用 DIRECTORY 中的系统提供的时区数据库,而不是 PostgreSQL 源代码发行版中包含的时区数据库。DIRECTORY 必须指定为绝对路径。/usr/share/zoneinfo 是某些操作系统上的可能目录。请注意,安装例程不会检测不匹配或错误的时区数据。如果你使用此选项,建议运行回归测试以验证你指向的时区数据能与 PostgreSQL 正常工作。

    • 此选项主要面向熟悉其目标操作系统的二进制包发行商。使用此选项的主要优势是每当许多本地夏令时规则更改时,都不需要升级 PostgreSQL 包。另一优势是,如果时区数据库文件不需要在安装过程中构建,那么 PostgreSQL 就可以更加直接地进行交叉编译。

  • -Dextra_version=_STRING_ #

    • STRING 附加到 PostgreSQL 版本号中。例如,你可以使用它来标记从未发布的 Git 快照构建的二进制文件或包含自定义补丁的二进制文件,以及附加版本字符串,例如 git describe 标识符或发行包版本号。

  • -Drpath={ true | false } #

    • 默认情况下,此选项设置为 true。如果设置为 false,则不要标记 PostgreSQL 的可执行文件,以表明它们应在安装的库目录中搜索共享库(请参阅 —​libdir )。在大多数平台上,此标记使用库目录的绝对路径,因此如果您稍后重新安装,这将无济于事。但是,您随后需要提供其他方法让可执行文件找到共享库。通常,这要求将操作系统的动态链接器配置为搜索库目录;请参阅 Section 17.5.1 了解更多详细信息。

  • -D_BINARY_NAME=PATH_ #

    • 如果构建 PostgreSQL 所需的程序(带有或不带有可选标志)存储在非标准路径中,你可以手动将其指定为 meson configure。可以通过运行 meson configure 找到支持此项操作的程序的完整列表。示例:

meson configure -DBISON=PATH_TO_BISON

17.4.3.5. Documentation #

请参阅 Section J.2 了解构建文档所需的工具。

  • -Ddocs={ auto | enabled | disabled } #

    • 启用以 HTML 和手册格式构建文档。它的默认值为自动。

  • -Ddocs_pdf={ auto | enabled | disabled } #

    • 启用以 PDF 格式构建文档。它的默认值为自动。

  • -Ddocs_html_style={ simple | website } #

    • 控制使用哪个 CSS 样式表。默认为 simple。如果设置为 website,HTML 文档将引用 postgresql.org 的样式表。

17.4.3.6. Miscellaneous #

  • -Dpgport=_NUMBER_ #

    • NUMBER 设置为服务器和客户端的默认端口号。默认值为 5432。该端口以后始终可以更改,但如果在此处指定,那么服务器和客户端都会内置相同的默认值,这样很方便。通常,选择非默认值唯一的充分理由是打算在同一台计算机上运行多个 PostgreSQL 服务器。

  • -Dkrb_srvnam=_NAME_ #

    • GSSAPI 使用的 Kerberos 服务主体的默认名称。 postgres 为默认值。通常没有理由更改此项,除非您为 Windows 环境进行构建,在这种情况下它必须设置为大写 POSTGRES

  • -Dsegsize=_SEGSIZE_ #

    • 设置 segment size,单位为千兆字节。将大表划分为多个操作系统文件,每个文件的大小等于段大小。这避免了在很多平台上存在的文件大小限制问题。默认的段大小为 1 千兆字节,在所有受支持平台上是安全的。如果您的操作系统有“大型文件”支持(如今大多数操作系统都有),那么您可以使用更大的段大小。在使用非常大的表时,这有助于减少使用的文件描述符数量。但请注意,不要选择超出平台和打算使用的文件系统支持的值。您可能希望使用的其他工具(例如 tar)也可以设定可用文件大小的限制。建议此值是 2 的幂,但不绝对要求这样做。

  • -Dblocksize=_BLOCKSIZE_ #

    • 设置 block size,单位为千字节。这是表中的存储和 I/O 单元。默认值为 8 千字节,适合大多数情况;但其他值可能在特殊情况下有用。该值必须是 1 到 32(千字节)之间的 2 的幂。

  • -Dwal_blocksize=_BLOCKSIZE_ #

    • 设置 WAL block size,单位为千字节。这是 WAL 日志中的存储和 I/O 单元。默认值为 8 千字节,适合大多数情况;但其他值可能在特殊情况下有用。该值必须是 1 到 64(千字节)之间的 2 的幂。

17.4.3.7. Developer Options #

本节中的大多数选项仅对开发或调试 PostgreSQL 有用。除了 —​debug,它们不建议用于生产构建,在不幸遇到 bug 时,—​debug 可以用于启用详细的 bug 报告。在支持 DTrace 的平台上,在生产中也可以合理使用 -Ddtrace

在构建将用于开发服务器内代码的安装时,建议至少使用 —​buildtype=debug-Dcassert 选项。

  • —​buildtype=_BUILDTYPE_ #

    • 此选项可用于指定要使用的构建类型;默认为 debugoptimized 。如果您希望对调试符号和优化级别进行比此选项提供的更细粒度的控制,则可以参阅 —​debug—​optimization 标志。

    • 通常使用以下构建类型: plaindebugdebugoptimizedrelease。有关它们的更多信息,请参阅 Meson documentation

  • —​debug #

    • 编译所有程序和库并附加调试符号。这意味着您可以在调试器中运行程序以分析问题。这会大幅增加已安装的可执行文件的大小,而且在非 GCC 编译器上通常还会禁用编译器优化,从而导致运行速度变慢。然而,在解决可能出现的问题时,拥有可用符号会非常有帮助。目前,只有在您使用 GCC 时,才建议将此选项用于生产安装。但如果您正在进行开发工作或运行测试版,那么您应始终启用此选项。

  • —​optimization=LEVEL #

    • 指定优化级别。LEVEL 可以设置为 {0、g、1、2、3、s} 中的任意一个。

  • —​werror #

    • 设置此选项会要求编译器将警告视为错误。这对于代码开发可能很有用。

  • -Dcassert={ true | false } #

    • 启用服务器中的 assertion 检查,该检查会测试许多“不可能发生”的情况。这对代码开发目的很有价值,但测试会显著减慢服务器的速度。此外,启用测试不一定能提高服务器的稳定性!声明检查未针对严重性进行分类,因此即使是一个相对无害的错误仍然会导致服务器重新启动,如果它触发了声明失败。此选项不建议用于生产用途,但您应该在开发工作或运行测试版时开启它。

  • -Dtap_tests={ auto | enabled | disabled } #

    • 使用 Perl TAP 工具启用测试。默认为自动,需要安装 Perl 和 Perl 模块 IPC::Run。有关更多信息,请参阅 Section 33.4

  • -DPG_TEST_EXTRA=_TEST_SUITES_ #

    • 启用需要特殊软件才能运行的测试套件。此选项通过空格分隔的列表接受参数。请参阅 Section 33.1.3 了解详情。

  • -Db_coverage={ true | false } #

    • 在使用 GCC 时,所有程序和库都将使用代码覆盖测试工具进行编译。运行时,它们将在构建目录中生成包含代码覆盖度量的文件。有关更多信息,请参阅 Section 33.5。此选项仅适用于 GCC,并且在执行开发工作时使用。

  • -Ddtrace={ auto | enabled | disabled } #

    • 启用此项会使用对动态跟踪工具 DTrace 的支持编译 PostgreSQL。有关详细信息,请参阅 Section 28.5

    • 要指向 dtrace 程序,可以设置 DTRACE 选项。这通常是必要的,因为 dtrace 通常安装在 /usr/sbin 下,而它可能不在您的 PATH 中。

  • -Dsegsize_blocks=SEGSIZE_BLOCKS #

    • 指定关系段大小(以块为单位)。如果 -Dsegsize 和此选项都已指定,那么此选项获胜。此选项仅供开发人员使用,用于测试与段相关的代码。