Postgresql 中文操作指南
17.3. Building and Installation with Autoconf and Make #
17.3.1. Short Version #
./configure
make
su
make 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
长版本是本节的其余部分。
17.3.2. Installation Procedure #
Note
如果您正在升级现有系统,请务必阅读 Section 19.6,其中包含有关升级集群的说明。
*Uninstallation: * 要撤销安装,请使用 make uninstall 命令。但是,这并不会移除任何已创建过的目录。
*Cleaning: * 安装完成后,您可以通过使用以下命令从源代码树中删除生成的文件来释放磁盘空间:make clean。这将保留 configure 生成的文件,以便您以后可以使用 make 重新生成所有内容。若要将源代码树重置为分发时的状态,请使用 make distclean。如果您打算在同一源代码树中为多个平台构建,则必须执行此操作并为每个平台重新配置。(或者,为每个平台使用单独的构建树,以保持源代码树不受修改。)
如果您执行构建后发现 configure 选项有误,或者您更改了 configure 检测的任何内容(例如,软件升级),则在重新配置和重新构建之前最好进行 make distclean 操作。如果没有此操作,配置选项中的更改可能无法传播到需要的所有位置。
17.3.3. configure Options #
以下介绍了 configure 的命令行选项。此列表不完整(使用 ./configure --help 获得完整列表)。此处未介绍的选项旨在用于高级用例(例如交叉编译),并记录在标准 Autoconf 文档中。
17.3.3.1. Installation Locations #
这些选项控制 make install 将文件放置的位置。—prefix 选项足以满足大多数情况。如果您有特殊需要,可以使用本部分中描述的其他选项自定义安装子目录。但是请注意,更改不同子目录的相对位置可能会导致安装不可重定位,这意味着您将无法在安装后移动它。(man 和 doc 位置不受此限制的影响。)对于可重定位安装,您可能需要使用后面描述的 —disable-rpath 选项。
-
—prefix=_PREFIX_ #
-
将所有文件安装在目录 PREFIX 下,而不是 /usr/local/pgsql。实际文件将安装到各种子目录中;不会直接将任何文件安装到 PREFIX 目录中。
-
-
—exec-prefix=_EXEC-PREFIX_ #
-
您可以将与架构相关的文件安装在不同前缀 EXEC-PREFIX 下,而不是 PREFIX 设置到的前缀。这对于在主机之间共享与架构无关的文件非常有用。如果您省略此项,则 EXEC-PREFIX 设置为等于 PREFIX,并且与架构相关的文件和无关的文件都将安装在同一树下,这可能是您想要的。
-
-
—bindir=_DIRECTORY_ #
-
指定可执行程序的目录。默认值为 _EXEC-PREFIX /bin_, 这通常表示 /usr/local/pgsql/bin 。
-
-
—sysconfdir=_DIRECTORY_ #
-
设置各种配置文件的目录,默认值为 _PREFIX /etc_。
-
-
—libdir=_DIRECTORY_ #
-
设置安装库和可动态加载模块的位置。默认值为 _EXEC-PREFIX /lib_.
-
-
—includedir=_DIRECTORY_ #
-
设置安装 C 和 C++ 头文件的目录。默认值为 _PREFIX /include_。
-
-
—datarootdir=_DIRECTORY_ #
-
设置各种只读数据文件的根目录。这仅为以下一些选项设置默认值。默认值为 _PREFIX /share_.
-
-
—datadir=_DIRECTORY_ #
-
设置已安装程序使用的只读数据文件的目录。默认值为 DATAROOTDIR 。请注意,这与你的数据库文件将放置的位置无关。
-
-
—localedir=_DIRECTORY_ #
-
设置安装本地数据(特别是消息转换编目文件)的目录。默认值为 _DATAROOTDIR /locale_。
-
-
—mandir=_DIRECTORY_ #
-
随 PostgreSQL 一起提供的参考手册将安装在这个目录下,在其各自的 man_x subdirectories. The default is DATAROOTDIR /man_ 下。
-
-
—docdir=_DIRECTORY_ #
-
设置安装文档文件(“man” 页除外)的根目录。这仅为以下选项设置默认值。此选项的默认值为 _DATAROOTDIR /doc/postgresql_。
-
-
—htmldir=_DIRECTORY_ #
-
PostgreSQL 中 HTML 格式的文档将安装在这个目录下。默认值为 DATAROOTDIR 。
-
Note
我们煞费苦心,才使得 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 下创建一个私有子目录,用于可动态加载的模块。
17.3.3.2. PostgreSQL Features #
本节所述的选项启用构建并非默认情况下构建的各种 PostgreSQL 功能。其中大多数仅仅是因为它们需要其他软件(如 Section 17.1 所述)。
-
—enable-nls[=_LANGUAGES]_ #
-
启用本地语言支持 (NLS),即以除英语之外的语言显示程序消息的能力。 LANGUAGES 是一个可选的、由语言代码组成的空格分隔列表,例如 —​enable-nls='de fr' 。(您的列表和实际提供的翻译之间的交集将自动计算。)如果您没有指定列表,则会安装所有可用的翻译。
-
要使用此选项,您需要 Gettext API 的实现。
-
-
—with-perl #
-
构建 PL/Perl 服务器端语言。
-
-
—with-python #
-
构建 PL/Python 服务器端语言。
-
-
—with-tcl #
-
构建 PL/Tcl 服务端语言。
-
-
—with-tclconfig=_DIRECTORY_ #
-
Tcl 会安装 tclConfig.sh 文件,其中包含构建用于与 Tcl 连接的模块所需配置信息。此文件通常可以在一个众所周知的位置自动找到,但是如果你希望使用其他版本的 Tcl,你可以指定搜索 tclConfig.sh 的目录。
-
-
—with-llvm #
-
通过对基于 LLVM 的 JIT 编译提供支持进行构建(参见 Chapter 32)。此操作需安装 LLVM 库。当前 LLVM 的最低必需版本是 3.9。
-
llvm-config 将用于查找所需的编译选项。llvm-config,然后在 PATH 中搜索所有支持的版本,将用于在 llvm-config-$major-$minor 中搜索。如果这不能得到所需的程序,请使用 LLVM_CONFIG 指定一个通往正确 llvm-config 的路径。例如
-
./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config'
-
LLVM 支持需要兼容的 clang 编译器(必要时,使用 CLANG 环境变量指定),以及可用的 C++ 编译器(必要时,使用 CXX 环境变量指定)。
-
—with-lz4 #
-
-
使用 LZ4 压缩支持构建。
-
—with-zstd #
-
-
使用 Zstandard 压缩支持构建。
-
—with-ssl=_LIBRARY_ #
-
-
使用支持 SSL(加密)连接构建。唯一支持的 LIBRARY 是 openssl。这要求安装 OpenSSL 包。configure 将检查所需的头文件和库以确保在进行之前 OpenSSL 安装已足够。
-
—with-openssl #
-
-
Obsolete equivalent of —with-ssl=openssl.
-
—with-gssapi #
-
-
使用支持 GSSAPI 认证进行构建。GSSAPI 需要安装 MIT Kerberos。在许多系统上,GSSAPI 系统(MIT Kerberos 安装的一部分)未安装在默认情况下会搜索的位置(例如, /usr/include 、 /usr/lib ),因此您必须使用 —​with-includes 和 —​with-libraries 选项以及此选项。 configure 将检查必需的头文件和库,以确保您的 GSSAPI 安装在继续之前是否足够。
-
—with-ldap #
-
-
通过对 LDAP 提供支持进行构建以进行身份验证和连接参数查找(参见 Section 34.18 和 Section 21.10 以获取更多信息)。在 Unix 上,此操作需安装 OpenLDAP 包。在 Windows 上,将使用默认 WinLDAP 库。在继续之前,configure 将检查必需的头文件和库以确保 OpenLDAP 安装足够。
-
—with-pam #
-
-
使用 PAM(可插拔身份验证模块)支持构建。
-
—with-bsd-auth #
-
-
使用 BSD 身份验证支持构建。(BSD 身份验证框架目前仅可在 OpenBSD 上使用。)
-
—with-systemd #
-
-
通过对 systemd 服务通知提供支持进行构建。如果服务器在 systemd 下启动,则此操作可改善集成,但不会影响其他操作;参见 Section 19.3 以获取更多信息。libsystemd 及其关联的头文件需要安装,才能使用此选项。
-
—with-bonjour #
-
-
使用对 Bonjour 自动服务发现的支持进行构建。这要求你的操作系统具备 Bonjour 支持。在 macOS 上推荐使用。
-
—with-uuid=_LIBRARY_ #
-
-
使用指定的 UUID 库构建 uuid-ossp 模块(它提供用于生成 UUID 的函数)。 LIBRARY 必须为以下之一:
-
—with-ossp-uuid #
-
-
Obsolete equivalent of —with-uuid=ossp.
-
—with-libxml #
-
-
使用 libxml2,启用 SQL/XML 支持。此功能需要 Libxml2 版本 2.6.23 或更高版本。
-
若要检测必需的编译器和链接器选项,PostgreSQL 将会查询 pkg-config(如果已安装并且了解 libxml2 的话)。否则,如果找到由 libxml2 安装的程序 xml2-config,将使用此程序。最好使用方法 pkg-config,因为它可以更好地处理多架构安装。
-
若要使用位于不寻常位置的 libxml2 安装,你可以设置 pkg-config 相关环境变量(请参阅其文档),或设置环境变量 XML2_CONFIG 指向 libxml2 安装中属于 xml2-config 程序,或设置变量 XML2_CFLAGS 和 XML2_LIBS。(如果安装了 pkg-config,那么若要覆盖其关于 libxml2 所在位置的想法,你必须设置 XML2_CONFIG 或者将 XML2_CFLAGS 和 XML2_LIBS 都设置为非空白字符串。)
-
—with-libxslt #
-
-
使用 libxslt 构建,启用 xml2 模块以执行 XML 的 XSL 转换。也必须指定 —​with-libxml 。
17.3.3.3. Anti-Features #
本节中描述的选项允许禁用默认建立的特定 PostgreSQL 特征,但如果所需的软件或系统特征不可用,可能需要将其关闭。除非极有必要,否则不建议使用这些选项。
-
—without-icu #
-
通过不对 ICU 库提供支持进行构建,从而禁用 ICU 校对功能的使用(参见 Section 24.2)。
-
-
—without-readline #
-
阻止使用 Readline 库(以及 libedit)。此选项将禁用 psql 中的命令行编辑和历史记录。
-
-
—with-libedit-preferred #
-
倾向于使用 BSD 许可的 libedit 库,而不是 GPL 许可的 Readline。此选项仅当同时安装了这两个库时才有意义;在这种情况下,默认使用 Readline。
-
-
—without-zlib #
-
禁止使用 Zlib 库。这会禁用 pg_dump 和 pg_restore 中的压缩存档支持。
-
-
—disable-spinlocks #
-
即使 PostgreSQL 在平台上没有 CPU 自旋锁支持,也允许构建成功。缺乏自旋锁支持将会导致非常差的性能;因此,仅当构建中止并告知您该平台缺乏自旋锁支持时才应使用此选项。如果在您的平台上构建 PostgreSQL 需要此选项,请将问题报告给 PostgreSQL 开发人员。
-
-
—disable-atomics #
-
禁用使用 CPU 原子操作。缺乏此类操作的平台上,此选项不起作用。拥有此类操作的平台上,此选项将导致差的性能。此选项仅适用于除错或进行性能比较。
-
-
—disable-thread-safety #
-
禁用客户端库的线程安全性。这将阻止 libpq 和 ECPG 程序中的并发线程安全地控制其私有连接句柄。仅在具有缺陷的线程支持的平台上才使用此选项。
-
17.3.3.4. Build Process Details #
-
—with-includes=_DIRECTORIES_ #
-
DIRECTORIES 是一个冒号分隔的目录列表,这些目录将添加到编译器搜索头文件的列表中。如果您在非标准位置安装了可选包(如 GNU Readline),您必须使用该选项,并且可能还要使用相应的 —​with-libraries 选项。
-
Example: —with-includes=/opt/gnu/include:/usr/sup/include.
-
-
—with-libraries=_DIRECTORIES_ #
-
DIRECTORIES 是一个冒号分隔的、用于搜索库的目录列表。如果您在非标准位置安装了包,您可能必须使用该选项(和相应的 —​with-includes 选项)。
-
Example: —with-libraries=/opt/gnu/lib:/usr/sup/lib.
-
-
—with-system-tzdata=_DIRECTORY_ #
-
PostgreSQL 包含它自己的时区数据库,它需要这些数据库进行日期和时间操作。实际上,此时区数据库与 FreeBSD、Linux 和 Solaris 等许多操作系统提供的 IANA 时区数据库兼容,因此再次安装它将是多余的。使用此选项时,将使用 DIRECTORY 中的系统提供的时区数据库,而不是 PostgreSQL 源代码发行版中包含的时区数据库。DIRECTORY 必须指定为绝对路径。/usr/share/zoneinfo 是某些操作系统上的可能目录。请注意,安装例程不会检测不匹配或错误的时区数据。如果你使用此选项,建议运行回归测试以验证你指向的时区数据能与 PostgreSQL 正常工作。
-
此选项主要面向熟悉其目标操作系统的二进制包发行商。使用此选项的主要优势是每当许多本地夏令时规则更改时,都不需要升级 PostgreSQL 包。另一优势是,如果时区数据库文件不需要在安装过程中构建,那么 PostgreSQL 就可以更加直接地进行交叉编译。
-
-
—with-extra-version=_STRING_ #
-
将 STRING 附加到 PostgreSQL 版本号中。例如,你可以使用它来标记从未发布的 Git 快照构建的二进制文件或包含自定义补丁的二进制文件,以及附加版本字符串,例如 git describe 标识符或发行包版本号。
-
-
—disable-rpath #
-
不要标记 PostgreSQL 可执行文件,以指示它们应该在安装的库目录中搜索共享库(参见 —​libdir )。在大多数平台上,此标记使用库目录的绝对路径,因此在您稍后重新安装时,这将毫无帮助。但您随后需要提供一些其他方法让可执行文件找到共享库。这通常需要配置操作系统动态连接器来搜索库目录;有关详情,参见 Section 17.5.1 。
-
17.3.3.5. Miscellaneous #
一般情况下,尤其是对于测试构建,使用 —with-pgport 调整默认端口号。本节中的其他选项仅向高级用户推荐。
-
—with-pgport=_NUMBER_ #
-
将 NUMBER 设置为服务器和客户端的默认端口号。默认值为 5432。该端口以后始终可以更改,但如果在此处指定,那么服务器和客户端都会内置相同的默认值,这样很方便。通常,选择非默认值唯一的充分理由是打算在同一台计算机上运行多个 PostgreSQL 服务器。
-
-
—with-krb-srvnam=_NAME_ #
-
GSSAPI 使用的 Kerberos 服务主体的默认名称。 postgres 为默认值。通常没有理由更改此项,除非您为 Windows 环境进行构建,在这种情况下它必须设置为大写 POSTGRES 。
-
-
—with-segsize=_SEGSIZE_ #
-
设置 segment size(单位为 GB)。大表分为多个操作系统文件,每个大小等于段大小。这避免了在众多平台上存在的文件大小限制问题。默认的段大小为 1 GB,在所有支持的平台上均安全。如果您的操作系统具有“大文件”支持(如今大多数都有),则可以使用更大的段大小。这有助于减少处理超大表时消耗的文件描述符数。但请注意不要选择高于平台和您打算使用的文件系统支持的值。您可能希望使用的其他工具(例如 tar)也可以设置可用文件大小的限制。建议(但不是绝对要求)此值为 2 的幂。请注意,更改此值会中断磁盘数据库兼容性,这意味着您不能使用 pg_upgrade 升级到具有不同段大小的版本。
-
-
—with-blocksize=_BLOCKSIZE_ #
-
设置 block size(单位为 KB)。这是表中的存储和 I/O 单位。默认值 8 KB 适用于大多数情况;但在特殊情况下,其他值可能也有用。该值必须是 1 到 32(KB)之间的 2 的幂。请注意,更改此值会中断磁盘数据库兼容性,这意味着您不能使用 pg_upgrade 升级到具有不同块大小的版本。
-
-
—with-wal-blocksize=_BLOCKSIZE_ #
-
设置 WAL block size(单位为 KB)。这是 WAL 日志中的存储和 I/O 单位。默认值 8 KB 适用于大多数情况;但在特殊情况下,其他值可能也有用。该值必须是 1 到 64(KB)之间的 2 的幂。请注意,更改此值会中断磁盘数据库兼容性,这意味着您不能使用 pg_upgrade 升级到具有不同 WAL 块大小的版本。
-
17.3.3.6. Developer Options #
本节中的大多数选项仅与 PostgreSQL 开发或调试有关。不推荐用于生产构建,但 —enable-debug 除外,在遇到错误的不幸情况下,它可以用于启用详细的错误报告。在支持 DTrace 的平台上,—enable-dtrace 也不失为一个在生产中使用的合理选项。
构建将用于开发服务器内代码的安装时,建议至少使用以下选项 —enable-debug 和 —enable-cassert。
-
—enable-debug #
-
编译所有程序和库并附加调试符号。这意味着您可以在调试器中运行程序以分析问题。这会大幅增加已安装的可执行文件的大小,而且在非 GCC 编译器上通常还会禁用编译器优化,从而导致运行速度变慢。然而,在解决可能出现的问题时,拥有可用符号会非常有帮助。目前,只有在您使用 GCC 时,才建议将此选项用于生产安装。但如果您正在进行开发工作或运行测试版,那么您应始终启用此选项。
-
-
—enable-cassert #
-
启用服务器中的 assertion 检查,测试许多“不可能发生”的情况。这对于代码开发非常宝贵,但测试可能会大大减缓服务器速度。另外,启用测试不一定能增强服务器的稳定性!断言检查未按严重程度分类,因此相对较小的错误可能会触发断言失败,导致服务器重新启动。此选项不推荐用于生产环境,但您应该在开发工作或运行测试版时打开它。
-
-
—enable-tap-tests #
-
启用使用 Perl TAP 工具的测试。此操作需要 Perl 安装和 Perl 模块 IPC::Run。有关更多信息,请参见 Section 33.4。
-
-
—enable-depend #
-
启用自动依赖项跟踪。使用此选项会设置 makefile,以便在任何头文件更改时重建所有受影响的对象文件。如果你在进行开发工作时这很有用,但如果你只想编译一次并安装,这就浪费开支。目前,此选项只能与 GCC 配合使用。
-
-
—enable-coverage #
-
在使用 GCC 时,所有程序和库都将使用代码覆盖测试工具进行编译。运行时,它们将在构建目录中生成包含代码覆盖度量的文件。有关更多信息,请参阅 Section 33.5。此选项仅适用于 GCC,并且在执行开发工作时使用。
-
-
—enable-profiling #
-
如果使用 GCC,所有程序和库都将编译成可分析的形式。在后端退出时,将创建一个包含 gmon.out 的子目录,其中包含分析数据的文件。此选项仅用于 GCC 以及在进行开发工作时。
-
-
—enable-dtrace #
-
使用对动态跟踪工具 DTrace 的支持编译 PostgreSQL。有关详细信息,请参见 Section 28.5 。
-
若要指向 dtrace 程序,可以设置环境变量 DTRACE。这通常是必需的,因为 dtrace 通常安装在 /usr/sbin 下,这可能不会存储在您的 PATH 中。
-
可以在 DTRACEFLAGS 环境变量中指定 dtrace 程序的其他命令行选项。在 Solaris 上,要将 DTrace 支持纳入 64 位二进制文件,你必须指定 DTRACEFLAGS="-64"。例如,使用 GCC 编译器:
-
./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
-
Using Sun’s compiler:
./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ...
-
—with-segsize-blocks=SEGSIZE_BLOCKS #
-
以块为单位指定关系段大小。如果 —​with-segsize 和此选项都指定了,则此选项获胜。此选项仅供开发人员使用,用于测试与段相关的代码。
-
17.3.4. configure Environment Variables #
除了上面描述的普通命令行选项外,configure 还会响应许多环境变量。您可以在 configure 命令行中指定环境变量,例如:
./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
在此用法中,环境变量与命令行选项略有不同。您还可以在事先设置此类变量:
export CC=/opt/bin/gcc
export CFLAGS='-O2 -pipe'
./configure
此用法很方便,因为许多程序的配置文件脚本会以类似方式对这些变量作出响应。
最常用的环境变量是 CC 和 CFLAGS。如果你偏好在 configure 挑选的 C 编译器,则可以将变量 CC 设置为你选择的程序。默认情况下,如果 configure 可用则会选择它,否则会选择平台的默认编译器(通常是 cc)。同样地,如果需要,你还可以使用 CFLAGS 变量覆盖默认编译器标志。
以下是可以通过这种方式设置的重要变量列表:
-
BISON #
-
Bison program
-
-
CC #
-
C compiler
-
-
CFLAGS #
-
传递给 C 编译器的选项
-
-
CLANG #
-
用于处理源代码以在使用 —​with-llvm 编译时执行内联的 clang 程序路径
-
-
CPP #
-
C preprocessor
-
-
CPPFLAGS #
-
传递给 C 预处理器的选项
-
-
CXX #
-
C++ compiler
-
-
CXXFLAGS #
-
要传递给 C++ 编译器的选项
-
-
DTRACE #
-
dtrace 程序的位置
-
-
DTRACEFLAGS #
-
要传递给 dtrace 程序的选项
-
-
FLEX #
-
Flex program
-
-
LDFLAGS #
-
在链接可执行文件或共享库时要使用的选项
-
-
LDFLAGS_EX #
-
仅用于链接可执行文件的附加选项
-
-
LDFLAGS_SL #
-
仅用于链接共享库的附加选项
-
-
LLVM_CONFIG #
-
用于定位 LLVM 安装的 llvm-config 程序
-
-
MSGFMT #
-
用于原生语言支持的 msgfmt 程序
-
-
PERL #
-
Perl 解释器程序。这将用于确定构建 PL/Perl 的依赖项。默认值为 perl。
-
-
PYTHON #
-
Python 解释器程序。这将用于确定构建 PL/Python 的依赖项。如果未设置此项,则按以下顺序探查以下内容:python3 python。
-
-
TCLSH #
-
Tcl 解释器程序。这将用于确定构建 PL/Tcl 的依赖项。如果未设置此项,则按以下顺序探查以下内容:tclsh tcl tclsh8.6 tclsh86 tclsh8.5 tclsh85 tclsh8.4 tclsh84。
-
-
XML2_CONFIG #
-
用于定位 libxml2 安装的 xml2-config 程序
-
有时,将事后选择的编译器标志添加到 configure 的设置中很有用。一个重要的示例是 gcc 的 -Werror 选项无法包含在传递给 configure 的 CFLAGS 中,因为它会破坏许多 configure 的内置测试。要添加此类标志,请在运行 make 时将它们包含在 COPT 环境变量中。COPT 的内容将添加到 configure 设置的 CFLAGS 和 LDFLAGS 选项中。例如,您可以执行以下操作:
make COPT='-Werror'
或
export COPT='-Werror'
make
Note
如果使用 GCC,最好使用至少_-O1_的优化级别进行构建,因为不使用优化(-O0)会禁用一些重要的编译器警告(例如使用未初始化的变量)。但是,非零优化级别可能会使调试复杂化,因为逐步执行已编译的代码通常不会与源代码行一一对应。如果您在尝试调试已优化代码时感到困惑,请重新编译相关特定文件,并使用 -O0。可以通过向 make 传递选项来轻松做到这一点:make PROFILE=-O0 file.o。
COPT 和 PROFILE 环境变量实际上由 PostgreSQL Makefile 以相同的方式处理。使用哪一种取决于偏好,但开发人员的常见习惯是使用 PROFILE 进行一次性标志调整,而 COPT 可能一直处于设置状态。