Skip to content

17.4. 使用 Meson 构建和安装#

17.4.1. 简短版本
17.4.2. 安装过程
17.4.3. meson setup 选项

17.4.1. 简短版本#

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. 安装过程#

  1. 配置

    安装过程的第一步是为您的系统配置构建树并选择您希望使用的选项。要创建和配置构建目录,您可以从 meson setup 命令开始。

    meson setup build
    

    setup 命令采用 builddirsrcdir 参数。如果没有给出 srcdir,Meson 将根据当前目录和 meson.build 的位置推断 srcdir。必须指定 builddir

    运行 meson setup 会加载构建配置文件并设置构建目录。此外,您还可以向 Meson 传递多个构建选项。一些常用的选项在后续部分中提到。例如

    # configure with a different installation prefix
    meson setup build --prefix=/home/user/pg-install
    

    configure to generate a debug build

    meson setup build --buildtype=debug

    configure to build with OpenSSL support

    meson setup build -Dssl=openssl

    设置构建目录是一次性步骤。要在新构建之前重新配置,您可以简单地使用 meson configure 命令

    meson configure -Dcassert=true
    

    meson configure 的常用命令行选项在 第 17.4.3 节 中进行了解释。

  2. 构建

    默认情况下,Meson 使用 Ninja 构建工具。要使用 Meson 从源代码构建 PostgreSQL,您只需在构建目录中使用 ninja 命令即可。

    ninja
    

    Ninja 将自动检测计算机中的 CPU 数量并相应地并行化自身。您可以使用命令行参数 -j 覆盖所使用的并行进程数。

    需要注意的是,在初始配置步骤之后,ninja 是您编译时唯一需要键入的命令。无论您如何更改源代码树(除了将其移动到一个全新的位置),Meson 都会检测更改并相应地重新生成自身。如果您有多个构建目录,这将特别方便。通常,其中一个用于开发(“调试”构建),而其他几个只用于偶尔(例如“静态分析”构建)。只需将 cd 切换到相应目录并运行 Ninja,即可构建任何配置。

    如果您想使用 ninja 以外的后端进行构建,可以使用 configure 和 --backend 选项来选择您想要使用的后端,然后使用 meson compile 进行构建。要了解有关这些后端以及您可以提供给 ninja 的其他参数的更多信息,您可以参考 Meson 文档

  3. 回归测试

    如果您想在安装新构建的服务器之前对其进行测试,则可以在此时运行回归测试。回归测试是一套测试套件,用于验证 PostgreSQL 是否按照开发人员的预期在您的机器上运行。键入

    meson test
    

    (这在 root 下不起作用;以非特权用户身份执行此操作。)有关解释测试结果的详细信息,请参见 第 33 章。您可以在以后的任何时间通过发出相同的命令来重复此测试。

    要在正在运行的 postgres 实例上运行 pg_regress 和 pg_isolation_regress 测试,请将 --setup running 指定为 meson test 的参数。

  4. 安装文件

    注意

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

    PostgreSQL 构建完成后,您可以通过简单运行 ninja install 命令来安装它。

    ninja install
    

    这会将文件安装到第 1 步中指定的目录中。确保您有适当的权限来写入该区域。您可能需要以 root 身份执行此步骤。或者,您可以预先创建目标目录并安排授予适当的权限。标准安装提供了客户端应用程序开发以及服务器端程序开发(例如用 C 编写的自定义函数或数据类型)所需的所有头文件。

    ninja install 适用于大多数情况,但如果您想使用更多选项(例如 --quiet 来禁止额外输出),您也可以使用 meson install。您可以在 Meson 文档中了解有关meson install及其选项的更多信息。

**卸载:**要撤消安装,您可以使用ninja uninstall命令。

**清理:**安装后,您可以使用ninja clean命令从源代码树中删除构建文件来释放磁盘空间。

17.4.3.meson setup选项#

meson setup的命令行选项在下面进行了解释。此列表不详尽(使用meson configure --help来获取一个详尽的列表)。此处未涵盖的选项适用于高级用例,并在标准Meson 文档中进行了记录。这些参数也可以与meson setup一起使用。

17.4.3.1. 安装位置#

这些选项控制ninja install(或meson install)将文件放置的位置。--prefix选项(示例第 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 附带的手册页将安装在此目录下,位于各自的 manx 子目录中。默认值为 DATADIR/man

注意

我们已采取措施,使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特性#

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

要指定 PostgreSQL 特定的选项,选项名称必须以-D为前缀。

-Dnls={ auto | enabled | disabled } #

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

-Dplperl={ auto | enabled | disabled } #

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

-Dplpython={ auto | enabled | disabled } #

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

-Dpltcl={ auto | enabled | disabled } #

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

-Dtcl_version=TCL_VERSION #

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

-Dicu={ auto | enabled | disabled } #

使用对 ICU 库的支持进行构建,从而可以使用 ICU 校对功能 (参见 第 24.2 节)。默认为自动,并且需要安装 ICU4C 软件包。当前 ICU4C 所需的最低版本为 4.2。

-Dllvm={ auto | enabled | disabled } #

使用对基于 LLVM 编译的支持进行构建 (参见 第 32 章)。这需要安装 LLVM 库。当前 LLVM 所需的最低版本为 3.9。默认情况下禁用。

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

-Dlz4={ auto | enabled | disabled } #

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

-Dzstd={ auto | enabled | disabled } #

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

-Dssl={ auto | LIBRARY } #

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

-Dgssapi={ auto | enabled | disabled } #

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

-Dldap={ auto | enabled | disabled } #

使用 对身份验证和连接参数查找的支持(有关更多信息,请参见 第 34.18 节第 21.10 节)。在 Unix 上,这需要安装 OpenLDAP 包。在 Windows 上,使用默认的 WinLDAP 库。默认为 auto。 meson configure 将检查所需的标头文件和库,以确保您的 OpenLDAP 安装在继续之前已足够。

-Dpam={ auto | enabled | disabled } #

使用 (可插入式认证模块)支持进行构建。默认为自动。

-Dbsd_auth={ auto | enabled | disabled } #

使用 BSD 认证支持进行构建。(BSD 认证框架目前仅在 OpenBSD 上可用。)默认为自动。

-Dsystemd={ auto | enabled | disabled } #

使用对 systemd 服务通知的支持进行构建。如果服务器在 systemd 下启动,这将改善集成,但不会对其他方面产生影响;有关更多信息,请参见 第 19.3 节默认为自动。需要安装 libsystemd 及其关联的头文件才能使用此选项。

-Dbonjour={ auto | enabled | disabled } #

使用对 Bonjour 自动服务发现的支持进行构建。默认为自动,并且需要操作系统中提供 Bonjour 支持。在 macOS 上推荐使用。

-Duuid=LIBRARY #

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

  • none 不构建 uuid 模块。这是默认值。

  • bsd 使用 FreeBSD 和一些其他 BSD 派生系统中找到的 UUID 函数

  • e2fs 使用 e2fsprogs 项目创建的 UUID 库;此库存在于大多数 Linux 系统和 macOS 中,也可以获取其他平台的库

  • ossp 使用 OSSP UUID 库

-Dlibxml={ auto | enabled | disabled } #

使用 libxml2 构建,启用 SQL/XML 支持。默认为自动。此功能需要 libxml2 版本 2.6.23 或更高版本。

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

-Dlibxslt={ auto | enabled | disabled } #

使用 libxslt 构建,启用 xml2 模块以执行 XML 的 XSL 转换。还必须指定 -Dlibxml。默认为 auto。

17.4.3.3. 反功能#

-Dreadline={ auto | enabled | disabled } #

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

-Dlibedit_preferred={ true | false } #

将其设置为 true 则优先使用 BSD 许可的 libedit 库,而不是 GPL 许可的 Readline。只有在安装了这两个库时,此选项才具有意义;默认值为 false,即使用 Readline

-Dzlib={ auto | enabled | disabled } #

启用 Zlib 库的使用。它默认为 auto,并启用对 pg_dumppg_restorepg_basebackup 中压缩存档的支持,并且推荐使用。

-Dspinlocks={ true | false } #

此选项默认设置为 true;将其设置为 false 将允许构建成功,即使 PostgreSQL 没有平台的 CPU 自旋锁支持。缺少自旋锁支持会导致性能非常差;因此,只有在构建中止并通知您平台缺少自旋锁支持时才应更改此选项。如果需要将此选项设置为 false 才能在您的平台上构建 PostgreSQL,请向 PostgreSQL 开发人员报告此问题。

-Datomics={ true | false } #

此选项默认设置为 true;将其设置为 false 将禁用 CPU 原子操作的使用。此选项在缺少此类操作的平台上不起作用。在具有此类操作的平台上,禁用原子操作会导致性能不佳。更改此选项仅对调试或进行性能比较有用。

17.4.3.4. 构建过程详细信息#

--auto_features={ auto | enabled | disabled } #

设置此选项允许你覆盖所有 auto 特性的值(如果找到所需的软件,则自动启用的特性)。这在你想禁用或启用所有 可选 特性而无需手动设置每个特性时很有用。此参数的默认值为 auto。

--backend=BACKEND #

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

-Dc_args=OPTIONS #

此选项可用于向 C 编译器传递额外的选项。

此选项可用于向 C 链接器传递额外的选项。

-Dextra_include_dirs=DIRECTORIES #

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

示例:-Dextra_include_dirs=/opt/gnu/include,/usr/sup/include

-Dextra_lib_dirs=DIRECTORIES #

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

示例:-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)。在大多数平台上,此标记使用库目录的绝对路径,因此如果您稍后重新安装,这将无济于事。但是,您需要为可执行文件提供其他方法来查找共享库。通常,这需要配置操作系统的动态链接器以搜索库目录;有关更多详细信息,请参阅 第 17.5.1 节

-DBINARY_NAME=PATH #

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

meson configure -DBISON=PATH_TO_BISON

17.4.3.5. 文档#

有关构建文档所需的工具,请参阅第 J.2 节

-Ddocs={ auto | enabled | disabled } #

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

-Ddocs_pdf={ auto | enabled | disabled } #

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

-Ddocs_html_style={ simple | website } #

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

17.4.3.6. 其他#

-Dpgport=NUMBER #

NUMBER设置为服务器和客户端的默认端口号。默认值为 5432。端口始终可以在以后更改,但如果在此处指定端口,则服务器和客户端都将编译相同的默认端口,这非常方便。通常,选择非默认值唯一的正当理由是您打算在同一台机器上运行多个PostgreSQL服务器。

-Dkrb_srvnam=NAME #

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

-Dsegsize=SEGSIZE #

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

-Dblocksize=BLOCKSIZE #

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

-Dwal_blocksize=BLOCKSIZE #

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

17.4.3.7. 开发人员选项#

此部分中的大多数选项仅适用于开发或调试PostgreSQL。不建议用于生产版本,但--debug除外,在您遇到错误的不幸情况下,它可以用于启用详细的错误报告。在支持 DTrace 的平台上,-Ddtrace在生产中使用也可能是合理的。

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

--buildtype=BUILDTYPE #

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

通常使用以下构建类型:plaindebugdebugoptimizedrelease。可以在 Meson 文档 中找到有关它们的更多信息。

--debug #

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

--optimization=LEVEL #

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

--werror #

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

-Dcassert={ true | false } #

在服务器中启用 断言 检查,用于测试许多 不可能发生 条件。这对于代码开发目的非常宝贵,但测试会显著降低服务器速度。此外,启用测试并不一定会增强服务器的稳定性!断言检查未按严重性分类,因此即使是相对无害的 bug,如果触发断言失败,仍会导致服务器重新启动。不建议在生产环境中使用此选项,但您应该在开发工作或运行测试版时启用它。

-Dtap_tests={ auto | enabled | disabled } #

使用 Perl TAP 工具启用测试。默认为 auto,需要安装 Perl 和 Perl 模块 IPC::Run有关更多信息,请参见 第 33.4 节

-DPG_TEST_EXTRA=TEST_SUITES #

启用需要特殊软件才能运行的测试套件。此选项通过空格分隔的列表接受参数。有关详细信息,请参见 第 33.1.3 节

-Db_coverage={ true | false } #

如果使用 GCC,则所有程序和库都使用代码覆盖率测试工具编译。运行时,它们会在构建目录中生成包含代码覆盖率指标的文件。 有关更多信息,请参见 第 33.5 节 此选项仅适用于 GCC 以及在进行开发工作时。

-Ddtrace={ auto | enabled | disabled } #

启用此项将编译 PostgreSQL,以支持动态跟踪工具 DTrace。 有关更多信息,请参见 第 28.5 节

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

-Dsegsize_blocks=SEGSIZE_BLOCKS #

以块为单位指定关系段大小。如果指定了 -Dsegsize 和此选项,则此选项获胜。此选项仅适用于开发人员,用于测试与段相关的代码。