# 17.4.安装程序

17.4.1.配置选项

17.4.2.配置环境变量

  1. 配置

    安装过程的第一步是为系统配置源代码树,并选择所需的选项。这是通过运行配置剧本对于默认安装,只需输入:

    ./configure
    

    该脚本将运行大量测试,以确定各种系统因变量的值,并检测操作系统的任何怪癖,最后将在构建树中创建几个文件来记录发现的内容。

    你也可以跑步配置如果希望将生成目录与原始源文件分开,请在源代码树外的目录中,然后在那里生成。这个过程叫做虚拟路径建筑以下是方法:

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

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

    通过向用户提供一个或多个命令行选项,可以自定义生成和安装过程配置。通常,您会自定义安装位置或生成的一组可选功能。配置有大量选项,如中所述第17.4.1节.

    而且配置响应某些环境变量,如中所述第17.4.2节。这些提供了自定义配置的其他方法。

  2. 建筑

    要启动生成,请键入以下任一项:

    make
    make all
    

    (记住使用GNU make。)构建将需要几分钟时间,具体取决于您的硬件。

    如果您想构建所有可以构建的东西,包括文档(HTML和手册页)和其他模块(contrib),改为键入:

    make world
    

    如果你想构建所有可以构建的东西,包括附加模块(contrib),但如果没有文档,请键入:

    make world-bin
    

    如果希望从另一个makefile而不是手动调用构建,则必须取消设置MAKELEVEL或者将其设置为零,例如:

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

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

  3. 回归测试

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

    make check
    

    (这不能作为root用户使用;请作为非特权用户使用。)看见第33章有关解释测试结果的详细信息。您可以在以后的任何时候通过发出相同的命令来重复此测试。

  4. 安装文件

    # 笔记

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

    要安装PostgreSQL,请输入:

    make install
    

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

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

    make install-docs
    

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

    make install-world
    

    这也会安装文档。

    如果您构建的世界没有上述文档,请键入:

    make install-world-bin
    

    你可以用制作安装条而不是制作安装在安装可执行文件和库时剥离它们。这将节省一些空间。如果使用调试支持构建,剥离将有效地删除调试支持,因此仅当不再需要调试时才应进行剥离。安装密封条试图做一个合理的工作来节省空间,但它并不完全了解如何从可执行文件中删除所有不需要的字节,因此,如果你想尽可能地节省所有磁盘空间,就必须进行手动操作。

    标准安装提供了客户端应用程序开发以及服务器端程序开发所需的所有头文件,例如用C编写的自定义函数或数据类型。

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

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

    src/bin有一些二进制文件只供服务器使用,但它们很小。

**卸载:**要撤消安装,请使用以下命令进行卸载。但是,这不会删除任何已创建的目录。

**打扫:**安装完成后,可以通过以下命令从源代码树中删除生成的文件来释放磁盘空间打扫干净。这将保留配置程序,这样你就可以用制作过后要将源树重置为其分发时的状态,请使用打扫卫生。如果要在同一个源代码树中为多个平台构建,则必须执行此操作,并为每个平台重新配置。(或者,为每个平台使用单独的构建树,以便源树保持不变。)

如果您执行构建,然后发现配置选择是错误的,或者如果你改变了什么配置调查(例如,软件升级),然后这是一个好主意打扫卫生在重新配置和重建之前。如果没有这一点,配置选择中的更改可能不会传播到需要的任何地方。

# 17.4.1. 配置选项

配置的命令行选项解释如下。此列表并不详尽(请使用配置-帮助要得到一个是)。此处未涵盖的选项适用于交叉编译等高级用例,并记录在标准Autoconf文档中。

# 17.4.1.1.安装位置

这些选项可以控制在哪里制作安装我会把文件放进去。这个--前缀在大多数情况下,该选项已足够。如果您有特殊需要,可以使用本节介绍的其他选项自定义安装子目录。但是,请注意,更改不同子目录的相对位置可能会导致安装不可重新定位,这意味着您将无法在安装后移动它。(小标题)成年男子医生地点不受此限制。)对于可重新定位的安装,您可能需要使用--禁用rpath选项将在后面介绍。

--前缀=*前缀*

安装目录下的所有文件*前缀而不是/usr/local/pgsql.实际文件将安装到各个子目录中;不会将任何文件直接安装到前缀*目录

--执行前缀=*EXEC-PREFIX*

可以在不同的前缀下安装与体系结构相关的文件,EXEC-PREFIX,比什么*前缀设置为。这对于在主机之间共享与体系结构无关的文件非常有用。如果你忽略了这个,那么EXEC-PREFIX设置为前缀*依赖于体系结构的文件和独立文件都将安装在同一棵树下,这可能是您想要的。

--宾迪尔=*目录*

指定可执行程序的目录。默认值是*EXEC-PREFIX*/垃圾箱,这通常意味着/usr/local/pgsql/bin.

--sysconfdir=*目录*

设置各种配置文件的目录,*前缀*/等等默认情况下。

--利伯迪尔=*目录*

设置安装库和可动态加载模块的位置。默认值是*EXEC-PREFIX*/解放党.

--includedir=*目录*

设置安装C和C++头文件的目录。默认值是*前缀*/包括.

--datarootdir=*目录*

为各种类型的只读数据文件设置根目录。这仅为以下一些选项设置默认值。默认值是*前缀*/分享.

--数据目录=*目录*

设置已安装程序使用的只读数据文件的目录。默认值是*DATAROOTDIR*。请注意,这与数据库文件的放置位置无关。

--localedir=*目录*

设置用于安装区域设置数据的目录,尤其是消息翻译目录文件。默认值是*DATAROOTDIR*/地点.

--曼迪尔=*目录*

PostgreSQL附带的手册页将安装在此目录下,并在各自的目录中老兄*十、*子目录。默认值是*DATAROOTDIR*/老兄.

--多克迪尔=*目录*

设置安装文档文件的根目录,但“手册”页除外。这仅设置以下选项的默认值。此选项的默认值为*DATAROOTDIR*/doc/postgresql.

--htmldir=*目录*

PostgreSQL的HTML格式文档将安装在此目录下。默认值是*DATAROOTDIR*.

# 笔记

已经注意到可以将PostgreSQL安装到共享的安装位置(例如/usr/本地/包括)不干扰系统其余部分的名称空间。首先,字符串“/postgresql“将自动附加到数据目录, sysconfdir多克迪尔,除非完全展开的目录名已包含字符串“博士后“或者”pgsql”. 例如,如果你选择/usr/本地作为前缀,文档将安装在/usr/local/doc/postgresql,但如果前缀是/opt/postgres,那么它就会在/opt/postgres/doc客户端接口的公共C头文件安装到includedir而且是干净的。内部头文件和服务器头文件安装在includedir.有关如何访问其头文件的信息,请参阅每个接口的文档。最后,如果合适,还将在下面创建一个私有子目录利伯迪尔用于动态加载模块。

# 17.4.1.2.PostgreSQL特性

本节中描述的选项允许构建默认情况下未构建的各种PostgreSQL功能。其中大多数是非默认的,只是因为它们需要额外的软件,如中所述第17.2节.

--启用nls[=*语言*]

启用本机语言支持(NLS),即以英语以外的语言显示程序消息的能力。*语言*是一个可选的空格分隔列表,其中列出了您希望支持的语言的代码,例如--启用nls='de fr'(列表和实际提供的翻译集之间的交集将自动计算。)如果未指定列表,则会安装所有可用的翻译。

要使用此选项,您将需要Gettext API的实现。

--使用perl

构建PL/Perl服务器端语言。

--用python

构建PL/Python服务器端语言。

--与tcl

构建PL/Tcl服务器端语言。

--使用tclconfig=*目录*

Tcl安装该文件tclConfig。嘘,其中包含构建与Tcl接口的模块所需的配置信息。该文件通常会在已知位置自动找到,但如果您想使用不同版本的Tcl,可以指定要查找的目录tclConfig。嘘.

--在重症监护室

为ICU提供支持库,支持使用ICU排序功能(请参阅第24.2节)。这需要安装ICU4C软件包。ICU4C的最低要求版本目前为4.2.

默认情况下,pkg config将用于查找所需的编译选项。ICU4C版本4.6及更高版本支持这一点。对于旧版本,或者如果pkg config不可用,则变量重症监护病房ICU_LIBS可以指定为配置,如本例所示:

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

(如果ICU4C位于编译器的默认搜索路径中,那么仍然需要指定非空字符串,以避免使用pkg config,例如,ICU_CFLAGS=“”.)

--与llvm

构建时支持基于LLVM的JIT编译(请参阅第32章)。这需要安装LLVM库。LLVM的最低要求版本目前为3.9.

llvm配置将用于查找所需的编译选项。llvm配置,然后llvm配置-$major-$minor对于所有受支持的版本,将在路径.如果无法生成所需的程序,请使用LLVM_配置指定到正确路径的步骤llvm配置例如

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

LLVM支持需要兼容的叮当声编译器(如有必要,使用叮当声环境变量)和一个工作C++编译器(如果需要的话,使用CXX环境变量)。

--使用-lz4

使用LZ4压缩支持构建。这允许使用LZ4压缩表数据。

--使用ssl=*图书馆*

构建时支持SSL(加密)连接。唯一的*图书馆*支持的是openssl。这需要安装OpenSSL包。配置在继续之前,将检查所需的头文件和库,以确保您的OpenSSL安装足够。

--使用openssl

过时的相当于--使用ssl=openssl.

--和gssapi

使用对GSSAPI身份验证的支持进行构建。在许多系统上,GSSAPI系统(通常是Kerberos安装的一部分)未安装在默认搜索的位置(例如。,/usr/包括, /usr/lib),所以您必须使用这些选项--包括--图书馆除了这个选项。配置在继续之前,将检查所需的头文件和库,以确保GSSAPI安装足够。

--使用ldap

使用LDAP构建支持身份验证和连接参数查找(请参阅第34.18节第21.10节更多信息)。在Unix上,这需要安装OpenLDAP包。在Windows上,使用默认的WinLDAP库。配置在继续之前,将检查所需的头文件和库,以确保OpenLDAP安装足够。

--和帕姆

与PAM一起构建(可插拔认证模块)支持。

--用bsd认证

使用BSD身份验证支持构建。(BSD身份验证框架目前仅在OpenBSD上可用。)

--用systemd

通过对systemd的支持进行构建服务通知。如果服务器是在systemd下启动的,这将提高集成度,但在其他方面没有影响;看见第19.3节了解更多信息。要使用此选项,需要安装libsystemd和相关的头文件。

--你好

使用对Bonjour自动服务发现的支持进行构建。这需要在操作系统中提供Bonjour支持。建议在macOS上使用。

--带uuid=*图书馆*

建造uuid ossp模块(提供生成UUID的函数),使用指定的UUID库。 *图书馆*必须是以下之一:

  • bsd使用FreeBSD、NetBSD和其他一些BSD派生系统中的UUID函数

  • e2fs使用e2fsprogs项目该库存在于大多数Linux系统和macOS中,也可用于其他平台

  • ossp使用OSSP UUID库 (opens new window)

--带ossp uuid

过时的相当于--uuid=ossp时.

--使用libxml

使用libxml2构建,支持SQL/XML。此功能需要Libxml2版本2.6.23或更高版本。

要检测所需的编译器和链接器选项,PostgreSQL将查询包装配置,如果已安装并了解libxml2.否则,该计划将失败xml2配置,由libxml2安装,如果找到它,将使用它。使用包装配置是首选,因为它可以更好地处理多体系结构安装。

要使用位于不寻常位置的libxml2安装,可以设置包装配置-相关的环境变量(参见其文档),或设置环境变量XML2_配置xml2配置属于libxml2安装的程序,或设置变量XML2_CFLAGSXML2_LIBS(如果包装配置则要覆盖libxml2所在位置的概念,必须XML2_配置或者两者兼而有之XML2_CFLAGSXML2_LIBS到非空字符串。)

--使用libxslt

使用libxslt构建,启用xml2模块来执行XML的XSL转换。--使用libxml也必须指定。

# 17.4.1.3.反特征

本节介绍的选项允许禁用某些默认生成的PostgreSQL功能,但如果所需的软件或系统功能不可用,则可能需要关闭这些功能。除非确有必要,否则不建议使用这些选项。

--没有读线

防止使用Readline库(以及libedit)。此选项禁用psql中的命令行编辑和历史记录。

--有libedit优先

支持使用BSD许可的libedit库,而不是GPL许可的Readline。只有安装了两个库时,此选项才有效;这种情况下的默认设置是使用Readline。

--没有zlib

防止使用Zlib库。这将禁用对pg中压缩档案的支持_转储和pg_恢复

--禁用旋转锁

即使PostgreSQL没有对平台的CPU自旋锁支持,也允许构建成功。缺少自旋锁支持将导致性能非常差;因此,只有当构建中止并通知您平台缺少自旋锁支持时,才应使用此选项。如果在您的平台上构建PostgreSQL需要此选项,请向PostgreSQL开发人员报告问题。

--禁用原子

禁用CPU原子操作的使用。在缺乏此类操作的平台上,此选项不起任何作用。在有它们的平台上,这将导致性能不佳。此选项仅在调试或进行性能比较时有用。

--禁用线程安全

禁用客户端库的线程安全。这会阻止libpq和ECPG程序中的并发线程安全地控制它们的私有连接句柄。仅在线程支持不足的平台上使用此选项。

# 17.4.1.4.构建过程细节

--包括=*目录*

*目录*是一个以冒号分隔的目录列表,将添加到编译器搜索头文件的列表中。如果在非标准位置安装了可选软件包(如GNU Readline),则必须使用此选项,可能还需要使用相应的--图书馆选项

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

--图书馆=*目录*

*目录*是一个以冒号分隔的目录列表,用于搜索库。您可能必须使用此选项(以及相应的--包括选项)如果在非标准位置安装了软件包。

例子:--带库=/opt/gnu/lib:/usr/sup/lib.

--使用系统数据=*目录*

PostgreSQL包含自己的时区数据库,用于日期和时间操作。这个时区数据库实际上与许多操作系统(如FreeBSD、Linux和Solaris)提供的IANA时区数据库兼容,因此再次安装它是多余的。使用此选项时,系统将在数据库中提供时区*目录使用,而不是PostgreSQL源代码发行版中包含的。目录*必须指定为绝对路径。/usr/share/zoneinfo可能是某些操作系统上的目录。请注意,安装例程不会检测不匹配或错误的时区数据。如果您使用此选项,建议您运行回归测试,以验证您所指向的时区数据是否能正确用于PostgreSQL。

此选项主要针对熟悉目标操作系统的二进制软件包分销商。使用此选项的主要优点是,每当许多本地夏时制规则发生变化时,PostgreSQL包都不需要升级。另一个优点是,如果在安装过程中不需要构建时区数据库文件,PostgreSQL可以更直接地进行交叉编译。

--有额外版本=*一串*

追加*一串*到PostgreSQL版本号。例如,您可以使用它来标记从未发布的Git快照生成的二进制文件,或包含带有额外版本字符串的自定义修补程序,例如git描述标识符或分发包发布号。

--禁用rpath

不要标记PostgreSQL的可执行文件,以指示它们应该在安装的库目录中搜索共享库(请参阅--利伯迪尔)。在大多数平台上,此标记使用指向库目录的绝对路径,因此,如果您以后重新定位安装,它将毫无帮助。但是,您需要为可执行文件提供一些其他方法来查找共享库。通常这需要配置操作系统的动态链接器来搜索库目录;看见第17.5.1节更多细节。

# 17.4.1.5.杂

使用--使用pgport.本节中的其他选项仅建议高级用户使用。

--使用pgport=*数字*

设置*数字*作为服务器和客户端的默认端口号。默认值为5432.这个端口以后总是可以更改的,但是如果您在这里指定它,那么服务器和客户机都将使用相同的默认值进行编译,这非常方便。通常,选择非默认值的唯一好理由是,如果要在同一台机器上运行多个PostgreSQL服务器。

--与krb srvnam合作=*名称*

GSSAPI使用的Kerberos服务主体的默认名称。博士后这是默认值。除非是为Windows环境构建,否则通常没有理由更改此设置,在这种情况下,必须将其设置为大写博士后.

--使用segsize=*赛格斯*

设定段大小,以千兆字节为单位。大型表被划分为多个操作系统文件,每个文件的大小等于段大小。这避免了许多平台上存在的文件大小限制问题。默认段大小为1G,在所有受支持的平台上都是安全的。如果你的操作系统支持“大文件”(现在大多数都支持),你可以使用更大的段大小。这有助于减少在处理非常大的表时使用的文件描述符的数量。但请注意,不要选择大于您的平台和您打算使用的文件系统支持的值。您可能希望使用的其他工具,例如tar,也可以设置可用文件大小的限制。虽然不是绝对要求,但建议该值为2的幂。请注意,更改此值会破坏磁盘数据库兼容性,这意味着您无法使用pg_升级升级到具有不同段大小的版本。

--大块头=*块状大小*

设定块大小,以千字节为单位。这是表中存储和I/O的单位。默认值为8KB,适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是1到32(千字节)之间的2的幂。请注意,更改此值会破坏磁盘数据库兼容性,这意味着您无法使用pg_升级升级到具有不同块大小的生成。

--大块头=*块状大小*

设定墙块大小,以千字节为单位。这是WAL日志中的存储和I/O单元。默认值为8KB,适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是1到64(千字节)之间的2的幂。请注意,更改此值会破坏磁盘数据库兼容性,这意味着您无法使用pg_升级升级到具有不同墙块大小的建筑。

# 17.4.1.6.开发者选项

本节中的大多数选项仅适用于开发或调试PostgreSQL。不建议将其用于生产构建,但以下情况除外:--启用调试,这对于在遇到错误的不幸事件中启用详细的错误报告非常有用。在支持DTrace的平台上,--启用dtrace也可合理用于生产。

在构建用于在服务器内部开发代码的安装时,建议至少使用以下选项:--启用调试--启用卡塞特.

--启用调试

编译带有调试符号的所有程序和库。这意味着您可以在调试器中运行程序来分析问题。这会极大地扩大已安装可执行文件的大小,在非GCC编译器上,它通常还会禁用编译器优化,导致速度减慢。然而,拥有可用的符号对于处理可能出现的任何问题非常有帮助。目前,只有在使用GCC的情况下,才建议将此选项用于生产安装。但如果你正在做开发工作或运行测试版,你应该一直打开它。

--启用卡塞特

使能够断言检查服务器,这会测试许多“不可能发生”的情况。这对于代码开发来说是非常宝贵的,但是测试会显著降低服务器的速度。此外,打开测试并不一定会提高服务器的稳定性!断言检查没有根据严重性进行分类,因此如果触发断言失败,相对无害的错误仍然会导致服务器重新启动。不建议在生产环境中使用此选项,但在开发工作或运行测试版时,应将其打开。

--启用抽头测试

使用Perl TAP工具启用测试。这需要Perl安装和Perl模块IPC::运行看见第33.4节了解更多信息。

--启用依赖

启用自动依赖项跟踪。使用此选项,可以设置makefiles,以便在更改任何头文件时重建所有受影响的对象文件。如果您正在进行开发工作,这是有用的,但如果您只打算编译一次并安装,这只是浪费了开销。目前,该选项仅适用于GCC。

--启用覆盖范围

如果使用GCC,所有程序和库都会使用代码覆盖率测试工具进行编译。运行时,它们会在构建目录中生成包含代码覆盖率指标的文件。看见第33.5节了解更多信息。此选项仅用于GCC和进行开发工作时。

--启用分析

如果使用GCC,所有程序和库都会被编译,以便对它们进行分析。在后端退出时,将创建一个子目录,其中包含格蒙。出来包含配置文件数据的文件。此选项仅用于GCC和进行开发工作时。

--启用dtrace

编译支持动态跟踪工具DTrace的PostgreSQL。看见第28.5节了解更多信息。

dtrace程序,环境变量DTRACE可以设定。这通常是必要的,因为dtrace通常安装在/usr/sbin,这可能不在你的路径.

额外的命令行选项dtrace程序可以在环境变量中指定DTRACEFLAGS。在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' ...

# 17.4.2. 配置环境变量

除了上面描述的普通命令行选项,配置响应多个环境变量。可以在上指定环境变量配置命令行,例如:

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

在这种用法中,环境变量与命令行选项几乎没有区别。您也可以事先设置这些变量:

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

这种用法很方便,因为许多程序的配置脚本以类似的方式响应这些变量。

这些环境变量中最常用的是科科斯群岛CFLAGS.如果你喜欢不同于配置选择,您可以设置变量科科斯群岛你选择的节目。默认情况下,配置会挑选gcc如果可用,则为平台的默认值(通常为复写的副本)。类似地,如果需要,可以使用CFLAGS变量

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

野牛

野牛计划

科科斯群岛

C编译器

CFLAGS

传递给C编译器的选项

叮当声

通往叮当声使用编译时用于处理内联源代码的程序--与llvm

CPP

C预处理器

CPPFLAGS

传递给C预处理器的选项

CXX

C++编译器

CXXFLAGS

传递给C++编译器的选项

DTRACE

地点dtrace程序

DTRACEFLAGS

将选项传递给dtrace程序

弯曲

Flex程序

LDFLAGS

链接可执行文件或共享库时使用的选项

LDU-EX

仅用于链接可执行文件的其他选项

LDU SL

仅用于链接共享库的其他选项

LLVM_配置

llvm配置用于定位LLVM安装的程序

MSGFMT

msgfmt母语支持计划

PERL

Perl解释器程序。这将用于确定构建PL/Perl的依赖关系。默认值是perl.

PYTHON

Python解释器程序。这将用于确定构建PL/Python的依赖关系。此外,这里是否指定了Python2或Python3(或者隐式选择了Python2或Python3)决定了可用的PL/Python语言变体。看见第46.1节了解更多信息。如果未设置,则按此顺序探测以下内容:蟒蛇蟒蛇3蟒蛇2.

TCLSH

Tcl解释器程序。这将用于确定构建PL/Tcl的依赖关系。如果未设置,则按此顺序探测以下内容:tclsh tcl tclsh8.6 tclsh86 tclsh8.5 tclsh85 tclsh8.4 tclsh84.

XML2_配置

xml2配置用于定位libxml2安装的程序

有时,将事实之后的编译器标志添加到用户选择的集合中是有用的配置一个重要的例子是gcc的-沃罗选项不能包含在列表中CFLAGS传给配置,因为它会打破许多配置的内置测试。要添加此类标志,请将其包含在科普特运行时的环境变量制作.文件的内容科普特都添加到了CFLAGSLDFLAGS由设置的选项配置.例如,你可以

make COPT='-Werror'

export COPT='-Werror'
make

# 笔记

如果使用GCC,最好以至少为的优化级别进行构建-O1,因为没有使用优化(-O0)禁用一些重要的编译器警告(例如使用未初始化的变量)。然而,非零优化级别可能会使调试复杂化,因为单步执行编译代码通常不会与源代码行一一匹配。如果您在调试优化代码时感到困惑,请使用重新编译感兴趣的特定文件-O0。一个简单的方法是通过传递选项来实现:make PROFILE=-O0文件。o.

这个科普特轮廓环境变量实际上由PostgreSQL makefiles以相同的方式处理。使用哪个是一个偏好问题,但开发人员的一个共同习惯是使用哪个轮廓用于一次性调整标志,而科普特可能一直都是固定的。