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 以外的后端进行构建,您可以使用带有 --backend
选项的 configure 来选择您想使用的后端,然后使用 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
),而不会干扰系统其余部分的命名空间。首先,除非完全展开的目录名称已经包含字符串 “postgres
” 或 “pgsql
”,否则字符串 “/postgresql
” 会自动附加到 datadir
、sysconfdir
和 docdir
。例如,如果选择 /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 的最低要求版本目前为 10。默认禁用。
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 身份验证。需要安装 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 库。默认设置为 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 库构建 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。默认设置为 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 }
#默认情况下,此选项设置为 true;将其设置为 false 将允许构建成功,即使 PostgreSQL 在该平台上没有 CPU 自旋锁支持。缺少自旋锁支持会导致性能非常差;因此,只有在构建中止并通知你该平台缺少自旋锁支持时,才应更改此选项。如果需要在你的平台上构建 PostgreSQL 而必须将此选项设置为 false,请将问题报告给 PostgreSQL 开发人员。
-Datomics={ true | false }
#默认情况下,此选项设置为 true;将其设置为 false 将禁用 CPU 原子操作。在缺少此类操作的平台上,此选项不起作用。在具有此类操作的平台上,禁用原子操作将导致性能不佳。更改此选项仅对调试或进行性能比较有用。
--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 快照构建的二进制文件,或包含自定义补丁的二进制文件,并带有额外的版本字符串,例如 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
有关构建文档所需的工具,请参阅 第 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 服务主体默认名称。postgres
为默认值。通常没有理由更改此设置,除非你正在为 Windows 环境构建,在这种情况下,必须将其设置为大写 POSTGRES
。
-Dsegsize=SEGSIZE
#设置段大小,以 GB 为单位。大型表被划分为多个操作系统文件,每个文件的大小等于段大小。这避免了许多平台上存在的文件大小限制问题。默认段大小为 1 GB,在所有受支持的平台上都是安全的。如果你的操作系统具有 “largefile” 支持(现在大多数操作系统都支持),则可以使用更大的段大小。这有助于减少处理非常大的表时消耗的文件描述符数量。但是,请注意不要选择大于你的平台和你要使用的文件系统支持的值。你可能希望使用的其他工具(例如 tar)也可能会对可用文件大小设置限制。建议(但不是绝对必需)此值是 2 的幂。
-Dblocksize=BLOCKSIZE
#设置块大小,以 KB 为单位。这是表中的存储和 I/O 单位。默认值 8 KB 适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 32(KB)之间的 2 的幂。
-Dwal_blocksize=BLOCKSIZE
#设置WAL 块大小,以 KB 为单位。这是 WAL 日志中的存储和 I/O 单位。默认值 8 KB 适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 64(KB)之间的 2 的幂。
本节中的大多数选项仅对开发或调试 PostgreSQL 有意义。除非使用 --debug
选项,否则不建议在生产版本中使用这些选项。 --debug
选项在您不幸遇到错误时,可以用来启用详细的错误报告。在支持 DTrace 的平台上,在生产环境中使用 -Ddtrace
也是合理的。
当构建一个用于在服务器内部开发代码的安装时,建议至少使用 --buildtype=debug
和 -Dcassert
选项。
--buildtype=BUILDTYPE
#此选项可用于指定要使用的构建类型;默认为 debugoptimized
。如果您希望比此选项提供的对调试符号和优化级别进行更精细的控制,您可以参考 --debug
和 --optimization
标志。
通常使用以下构建类型:plain
、debug
、debugoptimized
和 release
。有关它们的更多信息,请参阅 Meson 文档。
--debug
#使用调试符号编译所有程序和库。这意味着您可以在调试器中运行程序来分析问题。这会大大增加已安装可执行文件的大小,并且在非 GCC 编译器上,通常也会禁用编译器优化,从而导致速度减慢。但是,拥有可用的符号对于处理可能出现的任何问题非常有帮助。目前,仅当您使用 GCC 时,才建议在生产安装中使用此选项。但是,如果您正在进行开发工作或运行 beta 版本,则应始终启用它。
--optimization
=LEVEL
#指定优化级别。LEVEL
可以设置为 {0,g,1,2,3,s} 中的任何一个。
--werror
#设置此选项会要求编译器将警告视为错误。这对于代码开发很有用。
-Dcassert={ true | false }
#在服务器中启用断言检查,该检查会测试许多 “不可能发生” 的情况。这对于代码开发目的非常宝贵,但是这些测试会大大降低服务器的速度。此外,启用测试不一定会提高服务器的稳定性!断言检查没有按严重性进行分类,因此,即使是一个相对无害的错误,如果触发断言失败,仍然会导致服务器重启。不建议在生产环境中使用此选项,但是您在进行开发工作或运行 beta 版本时应启用它。
-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 }
#启用此选项会使用对动态跟踪工具 DTrace 的支持来编译 PostgreSQL。有关更多信息,请参见 第 27.5 节。
要指向 dtrace
程序,可以设置 DTRACE
选项。通常需要这样做,因为 dtrace
通常安装在 /usr/sbin
下,而 /usr/sbin
可能不在您的 PATH
中。
-Dinjection_points={ true | false }
#编译支持服务器中注入点的 PostgreSQL。注入点允许在预定义的代码路径中从服务器内部运行用户定义的代码。这有助于以受控方式测试和研究并发场景。默认情况下禁用此选项。有关更多详细信息,请参见 第 36.10.13 节。此选项仅供开发人员用于测试。
-Dsegsize_blocks=SEGSIZE_BLOCKS
#以块为单位指定关系段大小。如果同时指定了 -Dsegsize
和此选项,则此选项优先。此选项仅供开发人员用于测试与段相关的代码。
如果您发现文档中存在任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表格报告文档问题。