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 都将检测更改并相应地重新生成自身。如果您有多个构建目录,这尤其方便。通常其中一个用于开发(“调试”构建),而其他构建则仅在偶尔使用(例如“静态分析”构建)。只需切换到相应的目录并运行 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
)中,而不会干扰系统其余部分的命名空间。首先,字符串 “/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 的最低要求版本为 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 库。默认为 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 自旋锁支持。缺少自旋锁支持会导致性能非常差;因此,仅当构建中止并通知您平台缺少自旋锁支持时,才应更改此选项。如果需要将此选项设置为 false 才能在您的平台上构建 PostgreSQL,请向 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
(在您遇到错误时启用详细的错误报告非常有用)之外,不建议在生产版本中使用它们。在支持 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
和此选项,则此选项优先。此选项仅供开发人员使用,用于测试与段相关的代码。
如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。