支援的版本:目前 (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 page)和額外模組 (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 page),請輸入

    make install-docs
    

    如果您建置了上面的 world,請改為輸入

    make install-world
    

    這也會安裝文件。

    如果您建置了上面沒有文件的 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 #

設定安裝 locale 資料的目錄,尤其是訊息翻譯目錄檔案。 預設值為 DATAROOTDIR/locale

--mandir=DIRECTORY #

PostgreSQL 隨附的 man page 將安裝在此目錄下,位於各自的 manx 子目錄中。 預設值為 DATAROOTDIR/man

--docdir=DIRECTORY #

設定安裝文件檔案的根目錄,除了 man 頁面。 這僅設定以下選項的預設值。 此選項的預設值為 DATAROOTDIR/doc/postgresql

--htmldir=DIRECTORY #

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

注意

已採取措施,使您可以將 PostgreSQL 安裝到共享安裝位置(例如 /usr/local/include),而不會干擾系統其餘部分的命名空間。 首先,字串 /postgresql 會自動附加到 datadirsysconfdirdocdir,除非完全展開的目錄名稱已包含字串 postgrespgsql。 例如,如果您選擇 /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 的最低版本要求是 10。

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。這需要安裝 OpenSSL 套件。configure 將會檢查所需的標頭檔和程式庫,以確保您的 OpenSSL 安裝足以繼續進行。

--with-openssl #

已過時,等同於 --with-ssl=openssl

--with-gssapi #

建置以支援 GSSAPI 驗證。需要安裝 MIT Kerberos 才能使用 GSSAPI。在許多系統上,GSSAPI 系統(MIT Kerberos 安裝的一部分)並未安裝在預設搜尋的位置(例如,/usr/include/usr/lib),因此除了此選項之外,您還必須使用選項 --with-includes--with-librariesconfigure 將會檢查所需的標頭檔和程式庫,以確保您的 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 程式庫建置 uuid-ossp 模組(提供產生 UUID 的函式)。 LIBRARY 必須是下列其中之一:

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

  • e2fs 使用由 e2fsprogs 專案建立的 UUID 程式庫;此程式庫存在於大多數 Linux 系統和 macOS 中,也可以在其他平台上取得

  • 使用 ossp 選項來使用 OSSP UUID 函式庫

--with-ossp-uuid #

等同於過時的 --with-uuid=ossp

--with-libxml #

使用 libxml2 進行編譯,啟用 SQL/XML 支援。此功能需要 libxml2 2.6.23 或更新版本。

為了偵測所需的編譯器和連結器選項,如果已安裝 pkg-config 並且知道 libxml2,PostgreSQL 會查詢它。否則,如果找到 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 中對壓縮封存檔案的支援。

--disable-spinlocks #

即使 PostgreSQL 沒有該平台的 CPU 自旋鎖支援,也允許建置成功。缺乏自旋鎖支援會導致效能非常差;因此,只有在建置中止並通知您該平台缺乏自旋鎖支援時,才應使用此選項。如果在您的平台上建置 PostgreSQL 需要此選項,請向 PostgreSQL 開發人員報告此問題。

--disable-atomics #

停用 CPU 原子操作的使用。此選項在缺乏此類操作的平台上沒有任何作用。在確實有此類操作的平台上,這將導致效能不佳。此選項僅適用於偵錯或進行效能比較。

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=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)。在大多數平台上,此標記使用到函式庫目錄的絕對路徑,因此如果你稍後重新安置安裝目錄,它將沒有幫助。但是,你需要提供其他方式讓可執行檔找到共享函式庫。通常,這需要設定作業系統的動態連結器來搜尋函式庫目錄;更多詳細資訊請參閱第 17.5.1 節

17.3.3.5. 其他 #

調整預設埠號相當常見,特別是對於測試版本,可以使用 --with-pgport。本節中的其他選項僅建議進階使用者使用。

--with-pgport=NUMBER #

NUMBER 設定為伺服器和用戶端的預設埠號。預設值為 5432。埠號始終可以在稍後變更,但如果你在此處指定它,則伺服器和用戶端都將編譯相同的預設值,這非常方便。通常,選擇非預設值的唯一充分理由是,你打算在同一台機器上執行多個 PostgreSQL 伺服器。

--with-krb-srvnam=NAME #

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

--with-segsize=SEGSIZE #

設定區段大小,以 GB 為單位。大型資料表會被分成多個作業系統檔案,每個檔案的大小等於區段大小。這避免了許多平台上存在檔案大小限制的問題。預設區段大小為 1 GB,在所有支援的平台上都是安全的。如果你的作業系統具有largefile支援(現在大多數都有),則可以使用更大的區段大小。這有助於減少在使用非常大的資料表時消耗的檔案描述符數量。但請小心不要選擇大於你的平台和你要使用的檔案系統支援的值。你可能希望使用的其他工具(例如 tar)也可能對可使用的檔案大小設定限制。建議(但不是絕對必要)此值為 2 的冪。請注意,變更此值會破壞磁碟上的資料庫相容性,這意味著你無法使用 pg_upgrade 升級到具有不同區段大小的版本。

--with-blocksize=BLOCKSIZE #

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

--with-wal-blocksize=BLOCKSIZE #

設定WAL 區塊大小,以 KB 為單位。這是 WAL 記錄內的儲存和 I/O 單位。預設值為 8 KB,適用於大多數情況;但在特殊情況下,其他值可能有用。該值必須是介於 1 到 64(KB)之間的 2 的冪。請注意,變更此值會破壞磁碟上的資料庫相容性,這意味著你無法使用 pg_upgrade 升級到具有不同 WAL 區塊大小的版本。

17.3.3.6. 開發人員選項 #

本節中的大多數選項僅對開發或偵錯 PostgreSQL 感興趣。不建議用於生產版本,除了 --enable-debug 之外,如果很不幸地遇到錯誤,它可以啟用詳細的錯誤報告。在支援 DTrace 的平台上,在生產環境中使用 --enable-dtrace 也是合理的。

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

--enable-debug #

使用偵錯符號編譯所有程式和函式庫。這意味著你可以在偵錯器中執行這些程式來分析問題。這會大大增加已安裝可執行檔的大小,並且在非 GCC 編譯器上,通常也會停用編譯器最佳化,導致速度變慢。但是,擁有可用的符號對於處理可能發生的任何問題非常有幫助。目前,僅當你使用 GCC 時,才建議將此選項用於生產安裝。但是,如果你正在進行開發工作或執行 Beta 版本,則應始終啟用它。

--enable-cassert #

啟用伺服器中的斷言檢查,以測試許多不可能發生的情況。這對於程式碼開發目的非常寶貴,但測試可能會顯著降低伺服器的速度。此外,啟用測試不一定會提高伺服器的穩定性!斷言檢查沒有針對嚴重性進行分類,因此,如果觸發斷言失敗,即使是相對無害的錯誤也會導致伺服器重新啟動。不建議將此選項用於生產環境,但是你在進行開發工作或執行 Beta 版本時應啟用它。

--enable-tap-tests #

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

--enable-depend #

啟用自動追蹤依賴性。使用此選項,Makefile 會進行設定,以便在任何標頭檔變更時,重新建置所有受影響的物件檔。如果您正在進行開發工作,這會很有用,但如果您只打算編譯一次並安裝,則只會浪費額外資源。目前,此選項僅適用於 GCC。

--enable-coverage #

如果使用 GCC,所有程式和函式庫都會使用程式碼涵蓋率測試工具進行編譯。執行時,它們會在建置目錄中產生包含程式碼涵蓋率指標的檔案。請參閱第 31.5 節以取得更多資訊。此選項僅適用於 GCC 且在進行開發工作時使用。

--enable-profiling #

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

--enable-dtrace #

編譯 PostgreSQL,使其支援動態追蹤工具 DTrace。請參閱第 27.5 節以取得更多資訊。

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

可以在環境變數 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' ...
--enable-injection-points #

編譯 PostgreSQL 以支援伺服器中的注入點。注入點允許從伺服器內部的預定義程式碼路徑執行使用者定義的程式碼。 這有助於以受控方式測試和調查並行情境。預設會停用此選項。請參閱第 36.10.13 節以取得更多詳細資訊。 此選項僅供開發人員用於測試。

--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 設定的 CFLAGSLDFLAGS 選項中。 例如,你可以這樣做:

make COPT='-Werror'

或者

export COPT='-Werror'
make

注意

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

COPTPROFILE 環境變數實際上是由 PostgreSQL makefile 以相同的方式處理的。 使用哪個取決於偏好,但開發人員的常見習慣是將 PROFILE 用於一次性的旗標調整,而 COPT 可能會一直設定。

提交更正

如果您在文件中發現任何不正確、與您特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。