2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前 (18) / 17 / 16
開發版本:devel

17.3. 使用 Autoconf 和 Make 進行構建和安裝 #

17.3.1. 簡短版本 #

./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. 安裝過程 #

  1. 配置

    安裝過程的第一步是為您的系統配置原始碼樹並選擇所需的選項。這是透過執行 configure 指令碼來完成的。對於預設安裝,只需輸入

    ./configure
    

    此指令碼將執行一系列測試,以確定各種系統依賴變數的值,並檢測作業系統的任何怪癖,最後將在構建樹中建立幾個檔案來記錄它找到的內容。

    您也可以在原始碼樹之外的目錄中執行 configure,然後在那裡進行構建,如果您想讓構建目錄與原始原始碼檔案分開的話。這個過程稱為 VPATH 構建。方法如下:

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

    預設配置將構建伺服器和實用程式,以及所有隻需要 C 編譯器的客戶端應用程式和介面。所有檔案預設都將安裝在 /usr/local/pgsql 下。

    您可以透過向 configure 提供一個或多個命令列選項來自定義構建和安裝過程。通常,您會自定義安裝位置,或構建的選項功能集。 configure 有大量的選項,在第 17.3.3 節中有描述。

    此外,configure 還響應某些環境變數,如第 17.3.4 節中所述。這些提供了自定義配置的其他方式。

  2. 構建

    要開始構建,請鍵入以下任一命令:

    make
    make all
    

    (請記住使用GNU make。)構建將根據您的硬體花費幾分鐘時間。

    如果您想構建所有可構建的內容,包括文件(HTML 和 man 頁)以及額外的模組(contrib),請鍵入:

    make world
    

    如果您想構建所有可構建的內容,包括額外的模組(contrib),但不包括文件,請鍵入:

    make world-bin
    

    如果您想從另一個 makefile 呼叫構建而不是手動呼叫,您必須取消設定 MAKELEVEL 或將其設定為零,例如:

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

    未能這樣做可能會導致奇怪的錯誤訊息,通常是關於缺少標頭檔案的。

  3. 迴歸測試

    如果您想在安裝新構建的伺服器之前對其進行測試,可以在此時執行迴歸測試。迴歸測試是一套測試,用於驗證 PostgreSQL 在您的機器上的執行方式是否符合開發人員的預期。鍵入:

    make check
    

    (這在 root 使用者下不起作用;請以非特權使用者身份執行。)有關解釋測試結果的詳細資訊,請參閱第 31 章。您可以透過發出相同的命令在之後任何時間重複此測試。

  4. 安裝檔案

    注意

    如果您正在升級現有系統,請務必閱讀第 18.6 節,其中包含有關升級叢集的說明。

    要安裝 PostgreSQL,請輸入:

    make install
    

    這會將檔案安裝到步驟 1 中指定的目錄。請確保您擁有寫入該區域的適當許可權。通常您需要以 root 使用者身份執行此步驟。或者,您可以提前建立目標目錄並安排授予適當的許可權。

    要安裝文件(HTML 和 man 頁),請輸入:

    make install-docs
    

    如果您在上面構建了所有內容,請鍵入:

    make install-world
    

    這也將安裝文件。

    如果您在上面構建了所有內容但不包括文件,請鍵入:

    make install-world-bin
    

    您可以使用 make install-strip 代替 make install 來在安裝可執行檔案和庫時對其進行剝離。這會節省一些空間。如果您啟用了除錯支援進行構建,則剝離將有效地移除除錯支援,因此只有在不再需要除錯時才應執行此操作。 install-strip 試圖合理地節省空間,但它不完全瞭解如何從可執行檔案中剝離所有不必要的位元組,因此如果您想節省儘可能多的磁碟空間,您將不得不手動處理。

    標準安裝提供了客戶端應用程式開發以及伺服器端程式開發(例如 C 編寫的自定義函式或資料型別)所需的所有標頭檔案。

    僅客戶端安裝:  如果您只想安裝客戶端應用程式和介面庫,則可以使用以下命令:

    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 是個好主意。否則,您在配置選擇中的更改可能不會傳播到所有需要的地方。

17.3.3. configure 選項 #

下面將解釋 configure 的命令列選項。此列表並非詳盡無遺(使用 ./configure --help 獲取一個)。此處未涵蓋的選項用於高階用例,例如交叉編譯,並在標準的 Autoconf 文件中進行了記錄。

17.3.3.1. 安裝位置 #

這些選項控制 make install 將檔案放置在哪裡。對於大多數情況,--prefix 選項就足夠了。如果您有特殊需求,可以使用本節中描述的其他選項來自定義安裝子目錄。但是請注意,更改不同子目錄的相對位置可能會使安裝不可移動,這意味著安裝後您將無法移動它。(mandoc 位置不受此限制的影響。)對於可移動的安裝,您可能希望使用稍後描述的 --disable-rpath 選項。

--prefix=PREFIX #

將所有檔案安裝在 PREFIX 目錄而不是 /usr/local/pgsql 下。實際檔案將安裝在各種子目錄中;任何檔案都不會直接安裝在 PREFIX 目錄中。

--exec-prefix=EXEC-PREFIX #

您可以將依賴於體系結構的檔案的安裝目錄放在與 PREFIX 不同的字首 EXEC-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 頁將安裝在此目錄下的相應 manx 子目錄中。預設值為 DATAROOTDIR/man

--docdir=DIRECTORY #

設定安裝文件檔案(man 頁除外)的根目錄。這僅設定以下選項的預設值。此選項的預設值是 DATAROOTDIR/doc/postgresql

--htmldir=DIRECTORY #

PostgreSQL 的 HTML 格式文件將安裝在此目錄下。預設值為 DATAROOTDIR

注意

我們已仔細考慮了將 PostgreSQL 安裝到共享安裝位置(如 /usr/local/include)而不會干擾系統其他部分的名稱空間。首先,字串“/postgresql”會自動追加到 datadirsysconfdirdocdir,除非完全展開的目錄名已包含字串“postgres”或“pgsql”。例如,如果您選擇 /usr/local 作為字首,則文件將安裝在 /usr/local/doc/postgresql 中,但如果字首是 /opt/postgres,則它將安裝在 /opt/postgres/doc 中。客戶端介面的公共 C 標頭檔案安裝在 includedir 中,並且是名稱空間乾淨的。內部標頭檔案和伺服器標頭檔案安裝在 includedir 下的私有目錄中。有關如何訪問其標頭檔案的資訊,請參閱每個介面的文件。最後,如果合適,將在 libdir 下為動態載入的模組建立一個私有子目錄。

17.3.3.2. PostgreSQL 功能 #

本節介紹的選項支援構建各種預設未構建的 PostgreSQL 功能。其中大多數之所以是非預設的,僅僅是因為它們需要額外的軟體,如第 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 #

構建時支援基於 LLVMJIT編譯(請參閱第 30 章)。這需要安裝 LLVM 庫。當前所需的最低 LLVM 版本是 14。

llvm-config 將用於查詢所需的編譯選項。 llvm-config 將在您的 PATH 中搜索。如果找不到所需的程式,請使用 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(加密)連線。唯一支援的 LIBRARYopenssl,它同時用於 OpenSSLLibreSSL。這需要安裝 OpenSSL 包。 configure 將檢查所需的標頭檔案和庫,以確保您的 OpenSSL 安裝足夠,然後再繼續。

--with-openssl #

過時的 --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 身份驗證和連線引數查詢(有關更多資訊,請參閱第 32.18 節第 20.10 節)。在 Unix 上,這需要安裝 OpenLDAP 包。在 Windows 上,使用預設的 WinLDAP 庫。 configure 將檢查所需的標頭檔案和庫,以確保您的 OpenLDAP 安裝足夠,然後再繼續。

--with-pam #

構建時支援PAM(可插拔認證模組)支援。

--with-bsd-auth #

構建時支援 BSD 身份驗證。(BSD 身份驗證框架目前僅在 OpenBSD 上可用。)

--with-systemd #

構建時支援 systemd 服務通知。這會改善與 systemd 啟動伺服器的整合,但否則沒有影響;有關更多資訊,請參閱第 18.3 節。使用此選項需要安裝 libsystemd 和相關的標頭檔案。

--with-bonjour #

構建時支援 Bonjour 自動服務發現。這需要在您的作業系統中具有 Bonjour 支援。在 macOS 上推薦。

--with-uuid=LIBRARY #

構建 uuid-ossp 模組(提供生成 UUID 的函式),使用指定的 UUID 庫。 LIBRARY 必須是以下之一:

  • bsd 使用 FreeBSD 和其他一些 BSD 派生系統中找到的 UUID 函式

  • e2fs 使用 e2fsprogs 專案建立的 UUID 庫;此庫存在於大多數 Linux 系統和 macOS 中,並且也可以在其他平臺上獲得

  • ossp 使用 OSSP UUID 庫

--with-ossp-uuid #

過時的 --with-uuid=ossp 等效項。

--with-libcurl #

構建時支援 libcurl 以實現 OAuth 2.0 客戶端流程。此功能需要 libcurl 版本 7.61.0 或更高版本。使用此選項構建將檢查所需的標頭檔案和庫,以確保您的 curl 安裝足夠,然後再繼續。

--with-libnuma #

構建時支援 libnuma 以實現基本的 NUMA 支援。僅在實現了 libnuma 庫的平臺上受支援。

--with-liburing #

構建時支援 liburing,啟用 io_uring 支援以實現非同步 I/O。

為了檢測所需的編譯器和連結器選項,PostgreSQL 將查詢 pkg-config

要使用位於非標準位置的 liburing 安裝,您可以設定與 pkg-config 相關的環境變數(請參閱其文件)。

--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_CFLAGSXML2_LIBS。(如果安裝了 pkg-config,那麼要覆蓋其對 libxml2 位置的理解,您必須設定 XML2_CONFIG 或將 XML2_CFLAGSXML2_LIBS 都設定為非空字串。)

--with-libxslt #

構建時支援 libxslt,啟用 xml2 模組來執行 XML 的 XSL 轉換。還必須指定 --with-libxml

--with-selinux #

構建時支援 SElinux,啟用 sepgsql 擴充套件。

17.3.3.3. 反功能 #

本節介紹的選項允許停用某些預設構建的 PostgreSQL 功能,但在必需的軟體或系統功能不可用時可能需要關閉它們。除非確實有必要,否則不建議使用這些選項。

--without-icu #

構建時不支援 ICU 庫,停用 ICU 排序規則功能的使用(請參閱第 23.2 節)。

--without-readline #

阻止使用 Readline 庫(以及 libedit)。此選項在 psql 中停用命令列編輯和歷史記錄。

--with-libedit-preferred #

優先使用 BSD 許可的 libedit 庫而不是 GPL 許可的 Readline。此選項僅在您同時安裝了這兩個庫時才重要;在這種情況下,預設使用 Readline

--without-zlib #

阻止使用 Zlib 庫。這會停用 pg_dumppg_restore 中對壓縮存檔的支援。

17.3.3.4. 構建過程詳細資訊 #

--with-includes=DIRECTORIES #

DIRECTORIES 是一個由冒號分隔的目錄列表,這些目錄將被新增到編譯器搜尋標頭檔案的列表中。如果您在非標準位置安裝了可選包(例如 GNU Readline),則必須使用此選項,並且很可能還要使用相應的 --with-libraries 選項。

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

--with-libraries=DIRECTORIES #

DIRECTORIES 是一個由冒號分隔的目錄列表,用於搜尋庫。如果您在非標準位置安裝了軟體包,則很可能需要使用此選項(以及相應的 --with-includes 選項)。

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

--with-system-tzdata=目錄 #

PostgreSQL 包含自己的時區資料庫,這是進行日期和時間操作所必需的。此時區資料庫實際上與許多作業系統(如 FreeBSD、Linux 和 Solaris)提供的 IANA 時區資料庫相容,因此再次安裝它是多餘的。使用此選項時,將使用 目錄 中的系統提供的時區資料庫,而不是 PostgreSQL 原始碼發行版中包含的資料庫。目錄 必須指定為絕對路徑。/usr/share/zoneinfo 是某些作業系統上可能存在的目錄。請注意,安裝例程不會檢測不匹配或錯誤的時區資料。如果您使用此選項,建議執行迴歸測試以驗證您指定時區資料的有效性。

此選項主要面向瞭解其目標作業系統的二進位制包分發者。使用此選項的主要優點是,每當許多本地夏令時規則發生更改時,無需升級 PostgreSQL 包。另一個優點是,如果時區資料庫檔案不需要在安裝過程中構建,則可以更直接地交叉編譯 PostgreSQL。

--with-extra-version=字串 #

字串 追加到 PostgreSQL 版本號。例如,您可以使用此選項來標記從未釋出的 Git 快照構建或包含自定義補丁的二進位制檔案,並附加一個額外的版本字串,例如 git describe 識別符號或分發包的發行號。

--disable-rpath #

不標記 PostgreSQL 的可執行檔案,指示它們應該在安裝的庫目錄中搜索共享庫(請參閱 --libdir)。在大多數平臺上,此標記使用庫目錄的絕對路徑,因此如果您以後重新定位安裝,它將無用。但是,您需要透過其他方式讓可執行檔案找到共享庫。這通常需要配置作業系統的動態連結器以搜尋庫目錄;有關更多詳細資訊,請參閱 第 17.5.1 節

17.3.3.5. 雜項 #

通常,特別是在測試構建中,會使用 --with-pgport 來調整預設埠號。本節中的其他選項僅推薦給高階使用者。

--with-pgport=數字 #

數字 設定為伺服器和客戶端的預設埠號。預設值為 5432。埠可以隨時更改,但如果在此處指定,則伺服器和客戶端都將具有相同的預設編譯值,這可能非常方便。通常,選擇非預設值的唯一好理由是您打算在同一臺機器上執行多個 PostgreSQL 伺服器。

--with-krb-srvnam=名稱 #

GSSAPI 使用的 Kerberos 服務主體的預設名稱。postgres 是預設值。通常沒有理由更改此設定,除非您正在為 Windows 環境構建,在這種情況下,它必須設定為大寫的 POSTGRES

--with-segsize=SEGSIZE #

以千兆位元組為單位設定“段大小”。大表被劃分為多個作業系統檔案,每個檔案的大小等於段大小。這可以避免許多平臺存在的有關檔案大小限制的問題。預設段大小(1 千兆位元組)在所有支援的平臺上都是安全的。如果您的作業系統支援“大檔案”(現在大多數都支援),則可以使用更大的段大小。這有助於減少處理非常大的表時消耗的檔案描述符的數量。但請注意,不要選擇大於您的平臺和您打算使用的檔案系統支援的值。您可能希望使用的其他工具(如 tar)也可能設定可用檔案大小的限制。建議(但並非絕對必需)此值是 2 的冪。請注意,更改此值會破壞磁碟資料庫相容性,這意味著您不能使用 pg_upgrade 升級到具有不同段大小的構建。

--with-blocksize=BLOCKSIZE #

以千位元組為單位設定“塊大小”。這是表內的儲存和 I/O 單位。預設值 8 千位元組適用於大多數情況;但在特殊情況下,其他值可能有用。該值必須是 1 到 32(千位元組)之間的 2 的冪。請注意,更改此值會破壞磁碟資料庫相容性,這意味著您不能使用 pg_upgrade 升級到具有不同塊大小的構建。

--with-wal-blocksize=BLOCKSIZE #

以千位元組為單位設定“WAL 塊大小”。這是 WAL 日誌內的儲存和 I/O 單位。預設值 8 千位元組適用於大多數情況;但在特殊情況下,其他值可能有用。該值必須是 1 到 64(千位元組)之間的 2 的冪。請注意,更改此值會破壞磁碟資料庫相容性,這意味著您不能使用 pg_upgrade 升級到具有不同 WAL 塊大小的構建。

17.3.3.6. 開發人員選項 #

此部分中的大多數選項僅對開發或除錯 PostgreSQL 有意義。不建議將其用於生產構建,--enable-debug 除外,它在不幸遇到 bug 時可以用於啟用詳細的 bug 報告。在支援 DTrace 的平臺上,--enable-dtrace 在生產環境中使用也是合理的。

當構建用於在伺服器內部開發程式碼的安裝時,建議至少使用 --enable-debug--enable-cassert 選項。

--enable-debug #

使用除錯符號編譯所有程式和庫。這意味著您可以在偵錯程式中執行程式來分析問題。這會顯著增加已安裝可執行檔案的大小,並且在非 GCC 編譯器上通常還會停用編譯器最佳化,導致效能下降。但是,擁有符號對於處理可能出現的任何問題都非常有幫助。目前,此選項僅推薦用於生產安裝(如果您使用 GCC)。但如果您正在進行開發工作或執行 beta 版本,則應始終啟用它。

--enable-cassert #

在伺服器中啟用“斷言”檢查,它會測試許多“不可能發生”的條件。這對於程式碼開發非常有用,但測試可能會顯著降低伺服器速度。此外,啟用測試不一定會提高伺服器的穩定性!斷言檢查未按嚴重程度分類,因此相對無害的 bug 也會在觸發斷言失敗時導致伺服器重啟。此選項不推薦用於生產環境,但您應該在開發工作或執行 beta 版本時啟用它。

--enable-tap-tests #

啟用使用 Perl TAP 工具的測試。這需要安裝 Perl 和 Perl 模組 IPC::Run。有關更多資訊,請參閱 第 31.4 節

--enable-depend #

啟用自動依賴項跟蹤。使用此選項,makefiles 會設定好,以便在任何標頭檔案發生更改時都會重新構建所有受影響的目標檔案。如果您正在進行開發工作,這很有用,但如果您打算只編譯一次並安裝,則只是浪費開銷。目前,此選項僅適用於 GCC。

--enable-coverage #

如果使用 GCC,所有程式和庫都將使用程式碼覆蓋率測試插裝進行編譯。執行時,它們會在構建目錄中生成具有程式碼覆蓋率指標的檔案。有關更多資訊,請參閱 第 31.5 節。此選項僅用於 GCC 和開發工作。

--enable-profiling #

如果使用 GCC,所有程式和庫都將進行編譯,以便進行效能分析。在後端退出時,將建立一個子目錄,其中包含包含效能分析資料的 gmon.out 檔案。此選項僅用於 GCC 和開發工作。

--enable-dtrace #

使用 DTrace 動態跟蹤工具的支援編譯 PostgreSQL。有關更多資訊,請參閱 第 27.5 節

要指向 dtrace 程式,可以設定環境變數 DTRACE。這通常是必要的,因為 dtrace 通常安裝在 /usr/sbin 下,而這可能不在您的 PATH 中。

傳遞給 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' ...
--enable-injection-points #

使用伺服器中的注入點支援編譯 PostgreSQL。注入點允許從伺服器內的預定義程式碼路徑執行使用者定義的程式碼。這有助於以受控的方式進行測試和併發場景的研究。此選項預設停用。有關更多詳細資訊,請參閱 第 36.10.14 節。此選項僅供開發人員用於測試。

--with-segsize-blocks=SEGSIZE_BLOCKS #

以塊為單位指定關係段大小。如果同時指定了 --with-segsize 和此選項,則此選項生效。此選項僅供開發人員用於測試段相關程式碼。

17.3.4. configure 環境變數 #

除了上面描述的普通命令列選項外,configure 還響應許多環境變數。您可以在 configure 命令列上指定環境變數,例如

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

在此用法中,環境變數與命令列選項的區別不大。您也可以提前設定這些變數

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

這種用法可能很方便,因為許多程式的配置指令碼都以類似的方式響應這些變數。

這些環境變數中最常用的是 CCCFLAGS。如果您更喜歡與 configure 選擇的 C 編譯器不同的編譯器,可以將變數 CC 設定為您選擇的程式。預設情況下,如果可用,configure 會選擇 gcc,否則選擇平臺預設值(通常是 cc)。同樣,如果需要,您可以使用 CFLAGS 變數覆蓋預設的編譯器標誌。

以下是可以用這種方式設定的重要變數列表

BISON #

Bison 程式

CC #

C 編譯器

CFLAGS #

傳遞給 C 編譯器的選項

CLANG #

當使用 --with-llvm 編譯時,用於處理內聯原始碼的 clang 程式的路徑

CPP #

C 預處理器

CPPFLAGS #

傳遞給 C 預處理器的選項

CXX #

C++ 編譯器

CXXFLAGS #

傳遞給 C++ 編譯器的選項

DTRACE #

dtrace 程式的安裝位置

DTRACEFLAGS #

傳遞給 dtrace 程式的選項

FLEX #

Flex 程式

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 選項不能包含在傳遞給 configureCFLAGS 中,因為它會破壞 configure 的許多內建測試。要新增此類標誌,請在執行 make 時將其包含在 COPT 環境變數中。COPT 的內容將被新增到 configure 設定的 CFLAGSCXXFLAGSLDFLAGS 選項中。例如,您可以這樣做

make COPT='-Werror'

export COPT='-Werror'
make

注意

如果使用 GCC,最好以至少 -O1 的最佳化級別進行構建,因為不使用最佳化(-O0)會停用一些重要的編譯器警告(例如未初始化變數的使用)。但是,非零最佳化級別可能會使除錯複雜化,因為單步執行編譯後的程式碼通常與原始碼行不匹配。如果您在嘗試除錯最佳化程式碼時感到困惑,可以使用 -O0 重新編譯感興趣的特定檔案。一種簡單的方法是向 make 傳遞一個選項:make PROFILE=-O0 file.o

PostgreSQL makefiles 實際上以相同的方式處理 COPTPROFILE 環境變數。使用哪一個取決於個人偏好,但開發者中一種常見的習慣是使用 PROFILE 進行一次性標誌調整,而 COPT 可能會一直保持設定狀態。

提交更正

如果您在文件中發現任何不正確、不符合您對特定功能的使用體驗或需要進一步澄清的內容,請使用 此表格 報告文件問題。