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
长版本是本节的其余部分。
配置
安装过程的第一步是为您的系统配置构建树并选择您想要的选项。要创建和配置构建目录,可以使用 meson setup
命令。
meson setup build
setup 命令接受 builddir
和 srcdir
参数。如果未提供 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 节中进行解释。
构建
默认情况下,Meson 使用 Ninja 构建工具。要使用 Meson 从源代码构建 PostgreSQL,只需在构建目录中使用 ninja
命令即可。
ninja
Ninja 会自动检测您计算机上的 CPU 数量并相应地并行化。您可以使用命令行参数 -j
来覆盖使用的并行进程数。
需要注意的是,在初始配置步骤之后,ninja
是您需要输入的唯一编译命令。无论您如何修改源代码树(除非将其移动到完全新的位置),Meson 都会检测到更改并相应地重新生成。如果您有多个构建目录,这尤其方便。通常其中一个用于开发(“debug”构建),而其他目录仅偶尔使用(例如,“静态分析”构建)。只需 cd
到相应的目录并运行 Ninja,即可构建任何配置。
如果您希望使用除 ninja 之外的其他后端进行构建,可以使用 --backend
选项进行配置,然后使用 meson compile
进行构建。要了解有关这些后端以及您可以提供给 ninja 的其他参数的更多信息,请参阅 Meson 文档。
回归测试
如果您想在安装新构建的服务器之前对其进行测试,可以在此时运行回归测试。回归测试是一个测试套件,用于验证 PostgreSQL 在您的机器上的运行方式是否符合开发者的预期。输入:
meson test
(以 root 用户身份运行将不起作用;请以非特权用户身份执行。) 有关解释测试结果的详细信息,请参阅第 31 章。您可以随时通过发出相同的命令来重复此测试。
要针对正在运行的 postgres 实例运行 pg_regress 和 pg_isolation_regress 测试,请将 --setup running
作为参数传递给 meson test
。
安装文件
如果您正在升级现有系统,请务必阅读第 18.6 节,其中包含有关升级集群的说明。
PostgreSQL 构建完成后,只需运行 ninja install
命令即可进行安装。
ninja install
这会将文件安装到步骤 1 中指定的目录。请确保您有适当的权限写入该区域。您可能需要以 root 用户身份执行此步骤。或者,您可以提前创建目标目录并安排授予适当的权限。标准安装提供了客户端应用程序开发和服务器端程序开发(例如,用 C 编写的自定义函数或数据类型)所需的所有头文件。
ninja install
在大多数情况下都应该可以正常工作,但如果您想使用更多选项(例如 --quiet
以抑制额外输出),您也可以使用 meson install
。您可以在 Meson 文档中了解有关 meson install 及其选项的更多信息。
卸载: 要撤销安装,可以使用 ninja uninstall
命令。
清理: 安装后,可以通过使用 ninja clean
命令从源树中删除已构建的文件来释放磁盘空间。
meson setup
选项 #meson setup
的命令行选项将在下面解释。此列表不详尽(使用 meson configure --help
获取完整列表)。此处未涵盖的选项适用于高级用例,并在标准的 Meson 文档中进行了记录。这些参数也可与 meson setup
一起使用。
这些选项控制 ninja install
(或 meson install
)将文件放置在何处。--prefix
选项(示例 第 17.4.1 节)在大多数情况下都足够了。如果您有特殊需求,可以使用本节中描述的其他选项自定义安装子目录。但请注意,更改不同子目录的相对位置可能会使安装不可移动,这意味着安装后您无法移动它。(man
和 doc
的位置不受此限制的影响。)对于可移动安装,您可能希望使用稍后描述的 -Drpath=false
选项。
--prefix=PREFIX
#将所有文件安装在 PREFIX
目录而不是 /usr/local/pgsql
(在类 Unix 系统上)或
(在 Windows 上)。实际文件将安装在各种子目录中;没有任何文件会直接安装在 当前驱动器号
:/usr/local/pgsqlPREFIX
目录中。
--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
。DATADIR
/man
已采取措施,以便能够将 PostgreSQL 安装到共享安装位置(例如 /usr/local/include
),而不会干扰系统的其他命名空间。首先,字符串““/postgresql
””会自动附加到 datadir
、sysconfdir
和 docdir
,除非完全展开的目录名已包含字符串““postgres
””或““pgsql
””。例如,如果您选择 /usr/local
作为前缀,文档将安装在 /usr/local/doc/postgresql
中,但如果前缀是 /opt/postgres
,则会安装在 /opt/postgres/doc
中。客户端接口的公共 C 头文件安装到 includedir
中,并且是命名空间干净的。内部头文件和服务器头文件安装到 includedir
下的私有目录中。有关如何访问其头文件的信息,请参阅每个接口的文档。最后,如果适用,还将在 libdir
下创建一个私有子目录,用于动态加载的模块。
本节介绍的选项用于构建各种可选的 PostgreSQL 功能。其中大多数需要额外的软件,如第 17.1 节中所述,并且如果找到了所需的软件,它们将自动启用。您可以通过手动将这些功能设置为 enabled
(必需)或 disabled
(不构建)来更改此行为。
要指定特定于 PostgreSQL 的选项,选项名称必须以 -D
为前缀。
-Dnls={ auto | enabled | disabled }
#启用或禁用本地语言支持(NLS),即以非英语语言显示程序消息的能力。默认为 auto,如果找到 Gettext API 的实现,则会自动启用。
-Dplperl={ auto | enabled | disabled }
#构建 PL/Perl 服务器端语言。默认为 auto。
-Dplpython={ auto | enabled | disabled }
#构建 PL/Python 服务器端语言。默认为 auto。
-Dpltcl={ auto | enabled | disabled }
#构建 PL/Tcl 服务器端语言。默认为 auto。
-Dtcl_version=TCL_VERSION
#指定构建 PL/Tcl 时使用的 Tcl 版本。
-Dicu={ auto | enabled | disabled }
#使用 ICU 库构建支持,从而可以使用 ICU 排序规则功能(请参阅第 23.2 节)。默认为 auto,需要安装 ICU4C 包。当前所需的 ICU4C 的最低版本是 4.2。
-Dllvm={ auto | enabled | disabled }
#使用基于 LLVM 的构建支持JIT编译(请参阅第 30 章)。这需要安装 LLVM 库。当前所需的 LLVM 的最低版本是 14。默认禁用。
llvm-config
将用于查找所需的编译选项。将在您的 PATH
中搜索 llvm-config
,然后是 llvm-config-$version
(适用于所有支持的版本)。如果这不能找到所需的程序,请使用 LLVM_CONFIG
指定到正确 llvm-config
的路径。
-Dlz4={ auto | enabled | disabled }
#构建时支持 LZ4 压缩。默认为 auto。
-Dzstd={ auto | enabled | disabled }
#构建时支持 Zstandard 压缩。默认为 auto。
-Dssl={ auto | LIBRARY
}
#构建时支持SSL(加密)连接。支持的唯一 LIBRARY
是 openssl
。这需要安装 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 }
#构建时支持LDAP 认证和连接参数查找(有关更多信息,请参阅第 32.18 节和第 20.10 节)。在 Unix 上,这需要安装 OpenLDAP 包。在 Windows 上,使用默认的 WinLDAP 库。默认为 auto。meson configure
将检查所需的头文件和库,以确保您的 OpenLDAP 安装足够,然后再继续。
-Dpam={ auto | enabled | disabled }
#-Dbsd_auth={ auto | enabled | disabled }
#构建时支持 BSD 认证。(BSD 认证框架目前仅在 OpenBSD 上可用。)默认为 auto。
-Dsystemd={ auto | enabled | disabled }
#构建时支持 systemd 服务通知。这可以改善服务器在 systemd 下启动时的集成,但否则没有影响;有关更多信息,请参阅第 18.3 节。默认为 auto。使用此选项需要安装 libsystemd 和相关的头文件。
-Dbonjour={ auto | enabled | disabled }
#构建时支持 Bonjour 自动服务发现。默认为 auto,需要操作系统支持 Bonjour。在 macOS 上推荐。
-Duuid=LIBRARY
#构建 uuid-ossp 模块(提供生成 UUID 的函数),使用指定的 UUID 库。 LIBRARY
必须是以下之一:
none
不构建 uuid 模块。这是默认值。
bsd
使用 FreeBSD 和一些其他类 BSD 系统中找到的 UUID 函数。
e2fs
使用 e2fsprogs
项目创建的 UUID 库;该库在大多数 Linux 系统和 macOS 上都存在,也可以在其他平台上获取。
ossp
使用 OSSP UUID 库。
-Dlibcurl={ auto | enabled | disabled }
#构建时支持 libcurl 以实现 OAuth 2.0 客户端流。此功能需要 libcurl 版本 7.61.0 或更高版本。使用此选项构建将检查所需的头文件和库,以确保您的 Curl 安装足够,然后再继续。此选项的默认值为 auto。
-Dliburing={ auto | enabled | disabled }
#构建时支持 liburing,启用 io_uring 支持异步 I/O。默认为 auto。
要使用不在常见位置的 liburing 安装,您可以设置 pkg-config
相关的环境变量(请参阅其文档)。
-Dlibnuma={ auto | enabled | disabled }
#构建时支持 libnuma 以实现基本的 NUMA 支持。仅在实现 libnuma 库的平台上受支持。此选项的默认值为 auto。
-Dlibxml={ auto | enabled | disabled }
#构建时支持 libxml2,启用 SQL/XML 支持。默认为 auto。此功能需要 libxml2 版本 2.6.23 或更高版本。
要使用不在常见位置的 libxml2 安装,您可以设置 pkg-config
相关的环境变量(请参阅其文档)。
-Dlibxslt={ auto | enabled | disabled }
#构建时支持 libxslt,启用 xml2 模块来执行 XML 的 XSL 转换。还必须指定 -Dlibxml
。默认为 auto。
-Dselinux={ auto | enabled | disabled }
#构建时支持 SElinux,启用 sepgsql 扩展。默认为 auto。
-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_dump、pg_restore 和 pg_basebackup 中对压缩归档的支持,推荐使用。
--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
选项。
示例: -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 describe
标识符或发行包版本号)来标记从未发布 Git 快照构建的二进制文件或包含自定义补丁的二进制文件。
-Drpath={ true | false }
#此选项默认设置为 true。如果设置为 false,则不会标记 PostgreSQL 的可执行文件,指示它们应在安装的库目录(请参阅 --libdir
)中搜索共享库。在大多数平台上,此标记使用库目录的绝对路径,因此如果以后重新定位安装,它将无用。但是,您需要提供其他方法使可执行文件能够找到共享库。通常这需要配置操作系统的动态链接器来搜索库目录;有关更多详细信息,请参阅第 17.5.1 节。
-DBINARY_NAME
=PATH
#如果构建 PostgreSQL(无论是否使用可选标志)所需的程序存储在非标准路径中,您可以将其手动指定给 meson configure
。您可以通过运行 meson configure
来找到支持此选项的程序完整列表。示例:
meson configure -DBISON=PATH_TO_BISON
有关构建文档所需的工具,请参阅第 J.2 节。
-Ddocs={ auto | enabled | disabled }
#启用以HTML和man格式构建文档。默认为 auto。
-Ddocs_pdf={ auto | enabled | disabled }
#启用以PDF格式构建文档。默认为 auto。
-Ddocs_html_style={ simple | website }
#控制使用哪个CSS样式表。默认为 simple
。如果设置为 website
,HTML 文档将引用 postgresql.org 的样式表。
-Dpgport=NUMBER
#将 NUMBER
设置为服务器和客户端的默认端口号。默认值为 5432。端口可以随时更改,但如果在此处指定,服务器和客户端都将具有相同的默认编译值,这可能非常方便。通常,选择非默认值的唯一好理由是您打算在同一台机器上运行多个 PostgreSQL 服务器。
-Dkrb_srvnam=NAME
#GSSAPI 使用的 Kerberos 服务主体(principal)的默认名称。postgres
是默认值。通常没有理由更改此设置,除非您正在为 Windows 环境构建,在这种情况下,它必须设置为大写的 POSTGRES
。
-Dsegsize=SEGSIZE
#设置 段大小(以 GB 为单位)。大表被分成多个操作系统文件,每个文件的大小等于段大小。这避免了许多平台存在的与文件大小限制相关的问题。默认段大小 1GB 在所有支持的平台上都是安全的。如果您的操作系统支持““largefile
””支持(现在大多数都支持),您可以使用更大的段大小。这有助于减少处理非常大的表时消耗的文件描述符数量。但请注意不要选择大于您的平台和您打算使用的文件系统支持的值。您可能希望使用的其他工具,例如 tar,也可能对可用文件大小设置限制。推荐(但不绝对要求)将此值设置为 2 的幂。
-Dblocksize=BLOCKSIZE
#设置 块大小(以 KB 为单位)。这是表内存储和 I/O 的单位。默认的 8KB 适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 32(KB)之间的 2 的幂。
-Dwal_blocksize=BLOCKSIZE
#设置 WAL 块大小(以 KB 为单位)。这是 WAL 日志内存储和 I/O 的单位。默认的 8KB 适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 64(KB)之间的 2 的幂。
此部分中的大多数选项仅对开发或调试 PostgreSQL 感兴趣。不推荐在生产构建中使用它们,但 --debug
除外,它在不幸遇到 bug 时对于启用详细的 bug 报告很有用。在支持 DTrace 的平台上,在生产中使用 -Ddtrace
也可能是合理的。
构建将用于在服务器内部开发代码的安装时,建议至少使用 --buildtype=debug
和 -Dcassert
选项。
--buildtype=BUILDTYPE
#此选项可用于指定要使用的构建类型;默认为 debugoptimized
。如果您希望对调试符号和优化级别进行比此选项提供的更精细的控制,可以参考 --debug
和 --optimization
标志。
通常使用的构建类型如下: plain
、debug
、debugoptimized
和 release
。有关它们的更多信息可以在 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
。有关更多信息,请参阅第 31.4 节。
-DPG_TEST_EXTRA=TEST_SUITES
#启用其他测试套件,这些套件默认不运行,因为它们在多用户系统上运行不安全,需要特殊软件才能运行,或者资源密集。参数是用于启用测试的空格分隔列表。有关详细信息,请参阅第 31.1.3 节。如果运行测试时设置了 PG_TEST_EXTRA
环境变量,它将覆盖此设置时间选项。
-Db_coverage={ true | false }
#如果使用 GCC,所有程序和库都将使用代码覆盖率测试插装进行编译。运行时,它们将在构建目录中生成带有代码覆盖率指标的文件。有关更多信息,请参阅第 31.5 节。此选项仅与 GCC 结合用于开发工作。
-Ddtrace={ auto | enabled | disabled }
#启用此选项将 PostgreSQL 与 DTrace 动态跟踪工具的支持一起编译。有关更多信息,请参阅第 27.5 节。
要指向 dtrace
程序,可以设置 DTRACE
选项。这通常是必要的,因为 dtrace
通常安装在 /usr/sbin
下,而该目录可能不在您的 PATH
中。
-Dinjection_points={ true | false }
#使用注入点支持编译 PostgreSQL 服务器。注入点允许从服务器内部的预定义代码路径中运行用户定义的代码。这有助于以受控方式进行测试和并发场景的研究。此选项默认禁用。有关更多详细信息,请参阅第 36.10.14 节。此选项仅供开发人员用于测试。
-Dsegsize_blocks=SEGSIZE_BLOCKS
#以块为单位指定关系段大小。如果同时指定了 -Dsegsize
和此选项,则此选项优先。此选项仅供开发人员用于测试段相关代码。
如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。