16.4. 安装步骤

安装过程的第一步是为系统配置源代码树,然后选择所需的选项。这是通过运行configure脚本完成的。对于默认安装,只需 Importing:

./configure

该脚本将运行许多测试,以确定各种系统相关变量的值并检测 os 的任何怪癖,最后将在构建树中创建几个文件来记录发现的内容。如果要将构建目录分开,也可以在源树之外的目录中运行configure。此过程也称为 * VPATH *构建。这是如何做:

mkdir build_dir
cd build_dir
/path/to/source/tree/configure [options go here]
make

默认配置将构建服务器和 Util,以及仅需要 C 编译器的所有 Client 端应用程序和接口。默认情况下,所有文件都将安装在/usr/local/pgsql下。

您可以通过向configure提供以下一个或多个命令行选项来自定义构建和安装过程:

如果您有特殊需要,还可以使用以下选项来自定义各个子目录。但是,如果将它们保留为默认值,则安装将可重定位,这意味着您可以在安装后移动目录。 (mandoc位置不受此影响.)

对于可重定位的安装,您可能需要使用configure--disable-rpath选项。另外,您将需要告诉 os 如何找到共享库。

Note

采取了谨慎措施,使得可以将 PostgreSQL 安装到共享安装位置(例如/usr/local/include)而不会干扰系统其余部分的名称空间。首先,除非完全扩展的目录名称已经包含字符串“ postgres”或“ pgsql”,否则字符串“ /postgresql”会自动附加到datadirsysconfdirdocdir。例如,如果选择/usr/local作为前缀,则文档将安装在/usr/local/doc/postgresql中,但是如果前缀是/opt/postgres,则它将位于/opt/postgres/doc中。Client 端接口的公共 C 头文件安装在includedir中,并且名称空间干净。内部头文件和服务器头文件安装在includedir下的专用目录中。有关如何访问其头文件的信息,请参见每个接口的文档。最后,如果合适,还将在libdir下为可动态加载的模块创建一个私有子目录。

例如:--with-includes=/opt/gnu/include:/usr/sup/include

例如:--with-libraries=/opt/gnu/lib:/usr/sup/lib

要使用此选项,您将需要实现 Gettext API。往上看。

llvm-config 将用于查找所需的编译选项。将在PATH上搜索llvm-config,然后搜索llvm-config-$major-$minor以获取所有受支持的版本。如果那不能产生正确的二进制文件,请使用LLVM_CONFIG指定到正确的llvm-config的路径。例如

./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config'

LLVM 支持需要兼容的clang编译器(必要时使用CLANG环境变量指定)和工作的 C 编译器(必要时使用CXX环境变量指定)。

默认情况下,将使用 pkg-config 查找所需的编译选项。 ICU4C 4.6 版和更高版本支持此功能。对于较旧的版本,或者如果 pkg-config 不可用,则可以将变量ICU_CFLAGSICU_LIBS指定为configure,例如以下示例:

./configure ... --with-icu ICU_CFLAGS='-I/some/where/include' ICU_LIBS='-L/some/where/lib -licui18n -licuuc -licudata'

(如果 ICU4C 在编译器的默认搜索路径中,则仍需要指定一个非空字符串,以避免使用 pkg-config,例如ICU_CFLAGS=' '.)

为了检测所需的编译器和链接器选项,PostgreSQL 将查询pkg-config(如果已安装并且知道 libxml2)。否则,将找到 libxml2 安装的程序xml2-config。最好使用pkg-config,因为它可以更好地处理多体系结构安装。

要使用位于异常位置的 libxml2 安装,可以设置pkg-config相关的环境变量(请参见其文档),或者将环境变量XML2_CONFIG设置为指向属于 libxml2 安装的xml2-config程序,或者设置变量XML2_CFLAGSXML2_LIBS。 (如果安装了pkg-config,则必须设置XML2_CONFIG或将XML2_CFLAGSXML2_LIBS都设置为非空字符串,以覆盖其关于 libxml2 所在位置的想法.)

此选项主要针对非常了解其目标 os 的二进制软件包发行商。使用此选项的主要优点是,只要更改许多本地夏时制规则中的任何规则,就无需升级 PostgreSQL 软件包。另一个优点是,如果在安装过程中不需要构建时区数据库文件,则可以更直接地交叉编译 PostgreSQL。

要指向dtrace程序,可以设置环境变量DTRACE。这通常是必要的,因为dtrace通常安装在/usr/sbin下,而该路径可能不在路径中。

可以在环境变量DTRACEFLAGS中指定dtrace程序的其他命令行选项。在 Solaris 上,要在 64 位二进制文件中包含 DTrace 支持,必须指定DTRACEFLAGS="-64"进行配置。例如,使用 GCC 编译器:

./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...

使用 Sun 的编译器:

./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ...

如果您喜欢的 C 编译器不同于configure选择的 C 编译器,则可以将环境变量CC设置为您选择的程序。默认情况下,configure将选择gcc(如果有),否则选择平台的默认值(通常是cc)。同样,如果需要,可以使用CFLAGS变量覆盖默认的编译器标志。

您可以在configure命令行上指定环境变量,例如:

./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'

这是可以以这种方式设置的重要变量的列表:

有时,事后将编译器标志添加到configure选择的集合会很有用。一个重要的示例是 gcc 的-Werror选项不能包含在传递给configureCFLAGS中,因为它会破坏configure的许多内置测试。要添加此类标志,请在运行make时将其包括在COPT环境变量中。 COPT的内容同时添加到configure设置的CFLAGSLDFLAGS选项中。例如,您可以

make COPT='-Werror'

or

export COPT='-Werror'
make

Note

在服务器内部开发代码时,建议使用配置选项--enable-cassert(这会打开许多运行时错误检查)和--enable-debug(这会提高调试工具的实用性)。

如果使用 GCC,则最好以至少-O1的优化级别进行构建,因为不使用优化(-O0)会禁用一些重要的编译器警告(例如,使用未初始化的变量)。但是,非零优化级别会使调试复杂化,因为单步执行已编译的代码通常不会与源代码行一一对应。如果您在尝试调试优化的代码时感到困惑,请使用-O0重新编译所需的特定文件。一种简单的方法是传递一个选项:make PROFILE=-O0 file.o

PostgreSQL 的 makefile 实际上对COPTPROFILE环境变量进行了相同的处理。使用哪个选项是一个优先选择的问题,但是开发人员之间的一个普遍习惯是使用PROFILE进行一次标志调整,而COPT可能一直保持设置状态。

要开始构建,请键入以下任意一项:

make
make all

(记住要使用 GNU make.)根据您的硬件,构建过程将花费几分钟。显示的最后一行应为:

All of PostgreSQL successfully made. Ready to install.

如果要构建所有可以构建的内容,包括文档(HTML 和手册页)以及其他模块(contrib),请键入:

make world

显示的最后一行应为:

PostgreSQL, contrib, and documentation successfully made. Ready to install.

如果要从另一个生成文件而不是手动调用构建,则必须取消设置MAKELEVEL或将其设置为零,例如:

build-postgresql:
        $(MAKE) -C postgresql MAKELEVEL=0 all

否则可能会导致奇怪的错误消息,通常是有关缺少头文件的错误消息。

如果要在安装新服务器之前对其进行测试,则可以在此时运行回归测试。回归测试是一个测试套件,用于验证 PostgreSQL 是否以开发人员期望的方式在您的计算机上运行。类型:

make check

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

Note

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

要安装 PostgreSQL,请 Importing:

make install

这会将文件安装到Step 1中指定的目录中。确保您具有写入该区域的适当权限。通常,您需要以 root 用户身份执行此步骤。另外,您可以提前创建目标目录并安排要授予的适当权限。

要安装文档(HTML 和手册页),请 Importing:

make install-docs

如果您在上面构建了世界,请键入:

make install-world

这也将安装文档。

您可以使用make install-strip而不是make install来删除安装的可执行文件和库。这样可以节省一些空间。如果您是使用调试支持构建的,则剥离将有效地删除调试支持,因此仅在不再需要调试时才应这样做。 install-strip试图做一个合理的工作节省空间,但是它不具有如何从可执行文件中剥离每个不需要的字节的完整知识,因此,如果您想节省所有的磁盘空间,则必须进行手动工作。 。

标准安装提供了 Client 端应用程序开发以及服务器端程序开发所需的所有头文件,例如用 C 编写的自定义函数或数据类型。(在 PostgreSQL 8.0 之前,后者需要一个单独的make install-all-headers命令,但此步骤已折叠到标准安装中.)

仅 Client 端安装: 如果只想安装 Client 端应用程序和接口库,则可以使用以下命令:

make -C src/bin install
make -C src/include install
make -C src/interfaces install
make -C doc install

src/bin有一些仅用于服务器的二进制文件,但是它们很小。

卸载: 要撤消安装,请使用命令make uninstall。但是,这不会删除任何创建的目录。

清洁: 安装后,您可以通过使用命令make clean从源树中删除已构建的文件来释放磁盘空间。这将保留configure程序创建的文件,以便以后可以使用make重建所有内容。要将源树重置为分发状态,请使用make distclean。如果要在同一源代码树中为多个平台进行构建,则必须执行此操作并为每个平台重新配置。 (或者,为每个平台使用单独的构建树,以使源树保持不变.)

如果执行构建后发现configure选项有误,或者您更改了configure调查的内容(例如,软件升级),那么在重新配置和重建之前最好先进行make distclean。否则,您对配置选择的更改可能不会传播到所需的任何地方。

上一章 首页 下一章