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 都会检测这些更改,并相应地自行重新生成。当你有多个构建目录时,这一点特别有用。其中一个通常用于开发(“调试”构建),而其他构建则只间或使用(例如,“静态分析”构建)。只需 cd 到相应的目录并运行 Ninja,就可以构建任何配置。
如果你想使用 ninja 以外的后端进行构建,可以使用 configure 和 --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 中)。实际的文件将被安装到各个子目录中;任何文件都不会直接安装到 current drive letter
:/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),即,能够用除了英语之外的其他语言显示程序的消息。默认为自动,如果找到了 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 排序功能(请参阅 第 23.2 节)。默认为自动,并要求已经安装 ICU4C 软件包。目前所需的最低的 ICU4C 版本是 4.2。
-Dllvm={ auto | enabled | disabled }
#构建对基于 LLVM 的JIT编译(参见第 30 章)。这需要安装LLVM库。目前LLVM所需的最低版本是 10。默认情况下禁用。
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(加密)连接。唯一支持的LIBRARY
是openssl
。这需要安装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 支持身份验证和连接参数查找(有关详细信息,请参见 32.18 节 和 20.10 节)。在 Unix 系统上,这需要安装 OpenLDAP 包。在 Windows 系统上,将使用默认 WinLDAP 库。默认为自动。meson configure
将检查所需的标头文件和库,以确保您的 OpenLDAP 安装足够,然后再继续。
-Dpam={ auto | enabled | disabled }
#-Dbsd_auth={ auto | enabled | disabled }
#构建时启用 BSD 身份验证支持。(BSD 身份验证框架当前仅在 OpenBSD 中可用。)默认为自动。
-Dsystemd={ auto | enabled | disabled }
#构建时支持 systemd 服务通知。如果服务器在 systemd 下启动,这将改善集成,但否则不会产生任何影响;有关详细信息,请参见 18.3 节。默认为自动。需安装 libsystemd 及其关联的标头文件才能使用此选项。
-Dbonjour={ auto | enabled | disabled }
#构建时支持 Bonjour 自动服务发现。默认为自动,需要您的操作系统中支持 Bonjour。推荐在 macOS 上使用。
-Duuid=LIBRARY
#构建 uuid-ossp 模块(提供生成 UUID 的函数),使用指定的 UUID 库。 LIBRARY
必须是下列之一:
none
,不构建 uuid 模块。这是默认设置。
bsd
,使用 FreeBSD 和其他一些 BSD 衍生系统中找到的 UUID 函数
e2fs
使用由 e2fsprogs
项目创建的 UUID 库;此库存在于大多数 Linux 系统和 macOS 中,也可以为其他平台获取
ossp
使用 OSSP UUID 库
-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 中启用对压缩存档的支持并推荐。
-Dspinlocks={ true | false }
#此选项默认设置为真;如果将其设置为假,允许构建成功,即使 PostgreSQL 对平台没有 CPU 自旋锁支持。缺少自旋锁支持会导致性能非常差;因此,只有当构建中止并通知你平台缺少自旋锁支持时,才应更改此选项。如果设置此选项为假是构建你平台上的 PostgreSQL 必要的,请向 PostgreSQL 开发者报告问题。
-Datomics={ true | false }
#此选项默认设置为真;如果将其设置为假,将禁用 CPU 原子操作的使用。在缺乏此类操作的平台上,该选项不起作用。在有此类操作的平台上,禁用原子操作会导致性能差。更改此选项仅对调试或进行性能比较有用。
--auto_features={ auto | enabled | disabled }
#设置此选项允许你覆盖所有 “auto” 特性(如果找到所需软件则自动启用的特性)的值。当你想一次禁用或启用所有 “optional” 特性而不必手动设置每个特性时,这可能很有用。此参数的默认值是 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快照中构建的二进制文件,或者使用额外的版本字符串(例如git describe
标识符或发行包发布号)来包含自定义补丁。
-Drpath={ 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格式的文档。它默认为自动。
-Ddocs_pdf={ auto | enabled | disabled }
#启用构建PDF格式的文档。它默认为自动。
-Ddocs_html_style={ simple | website }
#控制使用哪些CSS样式表。默认值为 simple
。如果设置为 website
,HTML 文档将引用 postgresql.org 的样式表。
-Dpgport=NUMBER
#将 NUMBER
设置为服务器和客户端的默认端口号。默认值为 5432。稍后可以随时更改端口,但如果您在此处指定,那么服务器和客户端都将编译成具有相同的默认值,这非常方便。通常选择非默认值唯一充足的理由是,您打算在同一台计算机上运行多台 PostgreSQL 服务器。
-Dkrb_srvnam=NAME
#GSSAPI 使用的 Kerberos 服务主体默认名称。 postgres
是默认值。通常没有理由更改此设置,除非您为 Windows 环境构建,在这种情况下必须将其设置为大写 POSTGRES
。
-Dsegsize=SEGSIZE
#设置段大小,以千兆字节为单位。大表被划分为多个操作系统文件,每个文件的空间等于段大小。这避免了某些平台存在的档案大小限制问题。默认段大小,1 千兆字节,在所有支持的平台上都是安全的。如果您的操作系统支持“大文件”(如今大多数系统都支持),那么您就可以使用更大的段大小。在处理非常大的表时,这有助于减少消耗的文件描述符数。但是小心不要选择超出平台和您打算使用的文件系统支持的值。您可能想要使用的其他工具(例如tar)也可能对可使用文件大小设置限制。建议此值应为 2 的幂,但不是绝对要求。
-Dblocksize=BLOCKSIZE
#设置块大小,以千字节为单位。这是表中的存储和 I/O 单元。默认值 8 千字节适用于大多数情况;但在特殊情况下,其他值可能很有用。此值必须介于 1 到 32(千字节)之间的 2 的幂。
-Dwal_blocksize=BLOCKSIZE
#设置WAL 块大小,以千字节为单位。这是 WAL 日志中的存储和 I/O 单元。默认值 8 千字节适用于大多数情况;但在特殊情况下,其他值可能很有用。此值必须介于 1 到 64(千字节)之间的 2 的幂。
此部分中的大多数选项仅对开发或调试 PostgreSQL 有用。它们不推荐用于生产构建,除了 --debug
之外,如果在您不幸遇到错误时启用详细的错误报告,则它可能很有用。在支持 DTrace 的平台上,在生产中使用 -Ddtrace
也可能是合理的。
在构建将用于开发服务器内部代码的安装时,建议至少使用 --buildtype=debug
和 -Dcassert
选项。
--buildtype=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 }
#在服务器中启用断言检查,用于测试许多“绝不会发生”条件。这对编写代码非常有价值,但是这些测试会显著减慢服务器速度。此外,启用这些测试未必会提升服务器的稳定性!断言检查不按严重性分类,因此出现相对无害的错误仍会导致服务器重启,如果它触发了断言失败。不建议在生产环境中使用此选项,您应该在开发工作中或运行测试版本时启用此选项。
-Dtap_tests={ auto | enabled | disabled }
#使用 Perl TAP 工具启用测试。默认为 auto,并且要求 Perl 安装以及 Perl 模块 IPC::Run
。有关详细信息,请参阅第 31.4 节。
-DPG_TEST_EXTRA=TEST_SUITES
#启用需要特殊软件才能运行的测试套件。此选项通过空格分隔的列表接受参数。有关详细信息,请参阅第 31.1.3 节。
-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.13 节。此选项只能由开发者用于测试。
-Dsegsize_blocks=SEGSIZE_BLOCKS
#指定块中的关系段大小。如果同时指定 -Dsegsize
和此选项,则此选项将胜出。此选项仅适用于开发者,以测试与段相关的代码。