支援的版本:目前 (16)
開發版本:devel

17.4. 使用 Meson 進行建置和安裝 #

17.4.1. 簡短版本 #

meson setup build --prefix=/usr/local/pgsql
cd build
ninja
su
ninja 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.4.2. 安裝程序 #

  1. 設定

    安裝程序的第一個步驟是為您的系統設定建置樹並選擇您想要的選項。若要建立並設定建置目錄,您可以從 meson setup 指令開始。

    meson setup build
    

    設定指令會採用 builddirsrcdir 引數。如果未提供 srcdir,Meson 會根據目前目錄和 meson.build 的位置推斷 srcdir。必須提供 builddir

    執行 meson setup 會載入建置設定檔並設定建置目錄。此外,您還可以將多個建置選項傳遞給 Meson。後續章節會提到一些常用的選項。例如

    # configure with a different installation prefix
    meson setup build --prefix=/home/user/pg-install
    
    # configure to generate a debug build
    meson setup build --buildtype=debug
    
    # configure to build with OpenSSL support
    meson setup build -Dssl=openssl
    

    設定建置目錄是一次性的步驟。若要在新的建置之前重新設定,您可以直接使用 meson configure 指令

    meson configure -Dcassert=true
    

    meson configure 常用的命令列選項會說明在 章節 17.4.3 中。

  2. 建置

    預設情況下,Meson 會使用 Ninja 建置工具。若要使用 Meson 從來源建置 PostgreSQL,您只要在建置目錄中使用 ninja 指令即可。

    ninja
    

    Ninja 會自動偵測電腦中的 CPU 數量,並相應地進行平行化。您可以使用指令列參數 -j 來覆寫所使用的平行程序數量。

    請注意,在初始設定步驟後,ninja 是您編譯時唯一需要輸入的指令。不論您如何變更來源樹 (除了將其移至全新位置),Meson 都會偵測變更並相應地重新產生。如果您有多個建置目錄,這將特別方便。通常其中一個用於開發 (「偵錯」建置),而其他則只會偶爾使用 (例如「靜態分析」建置)。任何設定都只要透過 cd 到對應目錄並執行 Ninja 即可建置。

    如果您想使用 ninja 以外的其他後端建置,您可以使用設定和 --backend 選項來選擇您想使用的後端,然後使用 meson compile 建置。若要深入了解這些後端以及您可以提供給 ninja 的其他參數,您可以參閱 Meson 文件

  3. 回歸測試

    如果您想在安裝新建立的伺服器之前進行測試,您可以此時執行回歸測試。回歸測試是一種測試套件,用於驗證 PostgreSQL 是否如開發人員預期般在您的機器上執行。輸入

    meson test
    

    (這無法以 root 身分執行;請以非特權使用者身分執行。) 請參閱 第 33 章,以取得關於如何詮釋測試結果的詳細資訊。您可以在稍後任何時間透過發出相同的指令來重複此測試。

    若要針對正在執行的 postgres 執行 pg_regress 和 pg_isolation_regress 測試,請指定 --setup running 作為 meson test 的參數。

  4. 安裝檔案

    注意

    如果您要升級現有系統,請務必閱讀 第 19.6 節,其中包含有關如何升級群集的說明。

    一旦建置好 PostgreSQL,您只要執行 ninja install 指令即可安裝它。

    ninja install
    

    這會將檔案安裝到 步驟 1 中指定的目錄。請確定您有適當的權限可以寫入該區域。您可能需要以 root 身分執行此步驟。或者,您可以在事先建立目標目錄,並安排授予適當的權限。標準安裝提供所有標頭檔案,供用戶端應用程式開發以及伺服器端程式開發使用,例如以 C 編寫的客製化函式或資料類型。

    ninja install 應該可以在大多數情況下使用,但如果您想使用更多選項 (例如 --quiet 來抑制額外輸出),您也可以使用 meson install。您可以在 Meson 文件中深入了解 meson install 及其選項。

解除安裝:若要復原安裝,可以使用 ninja uninstall 指令。

清理:安裝後,可以使用 ninja clean 指令,從原始碼樹中移除已建置的檔案,以釋放磁碟空間。

17.4.3. meson setup 選項 #

meson setup 的命令列選項說明如下。此清單並非詳盡無遺(使用 meson configure --help 取得詳盡清單)。未在此處涵蓋的選項是針對進階使用案例而設計,並記載於標準的 Meson 文件 中。這些參數也可以搭配 meson setup 使用。

17.4.3.1. 安裝位置 #

這些選項控制 ninja install(或 meson install)放置檔案的位置。--prefix 選項(範例 第 17.4.1 節)足以應付大多數情況。如果您有特殊需求,可以使用本節中說明的其他選項自訂安裝子目錄。但請注意,變更不同子目錄的相對位置可能會使安裝無法重新定位,表示您在安裝後無法移動它。(mandoc 位置不受此限制影響。)對於可重新定位的安裝,您可能想使用稍後說明的 -Drpath=false 選項。

--prefix=PREFIX #

將所有檔案安裝在目錄 PREFIX 下,而非 /usr/local/pgsql(在基於 Unix 的系統上)或 目前磁碟機代號:/usr/local/pgsql(在 Windows 上)。實際檔案將安裝到各種子目錄中;不會有任何檔案直接安裝到 PREFIX 目錄中。

--bindir=DIRECTORY #

指定可執行程式目錄。預設為 PREFIX/bin

--sysconfdir=DIRECTORY #

設定各種設定檔的目錄,預設為 PREFIX/etc

--libdir=DIRECTORY #

設定安裝函式庫和動態載入模組的位置。預設為 PREFIX/lib

--includedir=目錄 #

設定安裝 C 和 C++ 標頭檔的目錄。預設為 PREFIX/include

--datadir=目錄 #

設定已安裝程式使用的唯讀資料檔目錄。預設為 PREFIX/share。請注意,這與資料庫檔放置的位置無關。

--localedir=目錄 #

設定安裝地區資料的目錄,特別是訊息翻譯目錄檔。預設為 DATADIR/locale

--mandir=目錄 #

PostgreSQL 隨附的手冊頁將安裝在此目錄下,位於各自的 manx 子目錄中。預設為 DATADIR/man

注意

我們已仔細規劃,讓您可以在不影響系統其他部分的命名空間的情況下,將 PostgreSQL 安裝到共用安裝位置(例如 /usr/local/include)。首先,字串 /postgresql 會自動附加到 datadirsysconfdirdocdir,除非已完全展開的目錄名稱已包含字串 postgrespgsql。例如,如果您選擇 /usr/local 作為前置詞,文件將安裝在 /usr/local/doc/postgresql 中,但如果前置詞是 /opt/postgres,則文件將安裝在 /opt/postgres/doc 中。用戶端介面的公用 C 標頭檔會安裝到 includedir 中,並且命名空間乾淨。內部標頭檔和伺服器標頭檔會安裝到 includedir 下的私人目錄中。請參閱各個介面的文件,以了解如何存取其標頭檔。最後,如果適當的話,也會在 libdir 下建立私人子目錄,以供動態載入模組使用。

17.4.3.2. PostgreSQL 功能 #

本節所述的選項可建置各種 PostgreSQL 選用功能。其中大部分需要額外的軟體,如 第 17.1 節 所述,如果找到所需的軟體,將自動啟用這些功能。您可以手動將這些功能設定為 enabled(需要)或 disabled(不建置)來變更此行為。

若要指定 PostgreSQL 特定的選項,選項名稱必須加上 -D 前綴。

-Dnls={ auto | enabled | disabled } #

啟用或停用原生語言支援 (NLS),也就是以英語以外的語言顯示程式訊息的能力。預設為 auto,如果找到 Gettext API 的實作,將自動啟用。

-Dplperl={ auto | enabled | disabled } #

建置 PL/Perl 伺服器端語言。預設為 auto。

-Dplpython={ auto | enabled | disabled } #

建置 PL/Python 伺服器端語言。預設為 auto。

-Dpltcl={ auto | enabled | disabled } #

建置 PL/Tcl 伺服器端語言。預設為 auto。

-Dtcl_version=TCL_VERSION #

指定建置 PL/Tcl 時要使用的 Tcl 版本。

-Dicu={ auto | enabled | disabled } #

使用支援 ICU 函式庫建置,啟用使用 ICU 排序功能 (請參閱 第 24.2 節)。預設為 auto,並需要安裝 ICU4C 套件。目前 ICU4C 所需的最低版本為 4.2。

-Dllvm={ auto | enabled | disabled } #

使用支援 LLVMJIT 編譯建置 (請參閱 第 32 章)。這需要安裝 LLVM 函式庫。目前 LLVM 所需的最低版本為 3.9。預設為停用。

llvm-config 將用於尋找所需的編譯選項。會在您的 PATH 中搜尋 llvm-config,然後搜尋所有受支援版本的 llvm-config-$version。如果這樣做無法產生所需的程式,請使用 LLVM_CONFIG 指定正確 llvm-config 的路徑。

-Dlz4={ auto | enabled | disabled } #

使用 LZ4 壓縮支援建置。預設為 auto。

-Dzstd={ auto | enabled | disabled } #

使用 Zstandard 壓縮支援建置。預設為 auto。

-Dssl={ auto | LIBRARY } #

使用支援 SSL(加密)連線來建置。唯一支援的 LIBRARYopenssl。這需要安裝 OpenSSL 套件。使用此套件建置會檢查所需的標頭檔和函式庫,以確保在繼續之前您的 OpenSSL 安裝已足夠。此選項的預設值為自動。

-Dgssapi={ auto | enabled | disabled } #

使用支援 GSSAPI 驗證來建置。GSSAPI 需要安裝 MIT Kerberos。在許多系統中,GSSAPI 系統(MIT Kerberos 安裝的一部分)並未安裝在預設搜尋的位置(例如,/usr/include/usr/lib)。在這些情況下,PostgreSQL 會查詢 pkg-config 來偵測所需的編譯器和連結器選項。預設為自動。 meson configure 會檢查所需的標頭檔和函式庫,以確保在繼續之前您的 GSSAPI 安裝已足夠。

-Dldap={ auto | enabled | disabled } #

使用 LDAP 支援驗證和連線參數查詢(更多資訊請參閱 第 34.18 節第 21.10 節)。在 Unix 上,這需要安裝 OpenLDAP 套件。在 Windows 上,使用預設的 WinLDAP 函式庫。預設為自動。 meson configure 會檢查所需的標頭檔和函式庫,以確保在繼續之前您的 OpenLDAP 安裝已足夠。

-Dpam={ auto | enabled | disabled } #

使用 PAM(可插入式驗證模組)支援來建置。預設為自動。

-Dbsd_auth={ auto | enabled | disabled } #

使用 BSD 驗證支援進行建置。(BSD 驗證架構目前僅在 OpenBSD 上可用。)預設為自動。

-Dsystemd={ auto | enabled | disabled } #

使用 systemd 服務通知支援進行建置。如果伺服器是在 systemd 下啟動,這會改善整合,但否則不會有影響;請參閱 第 19.3 節 以取得更多資訊。預設為自動。需要安裝 libsystemd 和相關標頭檔才能使用此選項。

-Dbonjour={ auto | enabled | disabled } #

使用 Bonjour 自動服務偵測支援進行建置。預設為自動,且需要作業系統中的 Bonjour 支援。建議在 macOS 上使用。

-Duuid=LIBRARY #

使用指定的 UUID 函式庫建置 uuid-ossp 模組(提供產生 UUID 的函式)。 LIBRARY 必須為下列其中之一:

  • none 不建置 uuid 模組。這是預設值。

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

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

  • ossp 使用 OSSP UUID 函式庫

-Dlibxml={ auto | enabled | disabled } #

使用 libxml2,啟用 SQL/XML 支援。預設為自動。此功能需要 libxml2 版本 2.6.23 或更新版本。

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

-Dlibxslt={ auto | enabled | disabled } #

使用 libxslt,啟用 xml2 模組來執行 XML 的 XSL 轉換。也必須指定 -Dlibxml。預設為自動。

17.4.3.3. 反功能 #

-Dreadline={ auto | 啟用 | 停用 } #

允許使用 Readline 函式庫(以及 libedit)。此選項預設為 auto,並在 psql 中啟用命令列編輯和記錄,強烈建議使用。

-Dlibedit_preferred={ true | false } #

將此設定為 true 會優先使用 BSD 授權的 libedit 函式庫,而不是 GPL 授權的 Readline。此選項僅在您已安裝兩個函式庫時才顯著;預設為 false,也就是使用 Readline

-Dzlib={ auto | 啟用 | 停用 } #

啟用 Zlib 函式庫。預設為 auto,並在 pg_dumppg_restorepg_basebackup 中啟用對壓縮檔案的支援,建議使用。

-Dspinlocks={ true | false } #

此選項預設設定為 true;將其設定為 false 將允許建置成功,即使 PostgreSQL 沒有平台的 CPU spinlock 支援。缺乏 spinlock 支援將導致效能非常差;因此,只有在建置中斷並通知您平台缺乏 spinlock 支援時,才應變更此選項。如果在您的平台上建置 PostgreSQL 需要將此選項設定為 false,請向 PostgreSQL 開發人員回報問題。

-Datomics={ true | false } #

此選項預設設定為 true;將其設定為 false 將停用 CPU 原子操作。在缺乏此類操作的平台上,此選項不會執行任何動作。在具有此類操作的平台上,停用原子操作將導致效能不佳。變更此選項僅適用於除錯或進行效能比較。

17.4.3.4. 建置程序詳細資料 #

--auto_features={ auto | 啟用 | 停用 } #

設定此選項允許您覆寫所有 auto 功能的值(如果找到所需的軟體,就會自動啟用的功能)。當您想要同時停用或啟用所有 optional 功能,而不需要手動設定每個功能時,這會很有用。此參數的預設值為 auto。

--backend=BACKEND #

Meson 使用的預設後端是 ninja,這對於大多數使用案例來說就已足夠。但是,如果你想完全整合 Visual Studio,你可以將 BACKEND 設定為 vs

-Dc_args=OPTIONS #

這個選項可以用來傳遞額外的選項給 C 編譯器。

這個選項可以用來傳遞額外的選項給 C 連結器。

-Dextra_include_dirs=DIRECTORIES #

DIRECTORIES 是目錄的逗號分隔清單,這些目錄將會新增到編譯器搜尋標頭檔的清單中。如果你有安裝在非標準位置的選用套件(例如 GNU Readline),你必須使用這個選項,而且可能也需要對應的 -Dextra_lib_dirs 選項。

範例:-Dextra_include_dirs=/opt/gnu/include,/usr/sup/include

-Dextra_lib_dirs=DIRECTORIES #

DIRECTORIES 是目錄的逗號分隔清單,用於搜尋函式庫。如果你有安裝在非標準位置的套件,你可能需要使用這個選項(以及對應的 -Dextra_include_dirs 選項)。

範例:-Dextra_lib_dirs=/opt/gnu/lib,/usr/sup/lib

-Dsystem_tzdata=DIRECTORY #

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

此選項主要針對熟悉目標作業系統的二進制套件發行者。使用此選項的主要優點在於,當許多當地夏令時間規則變更時,PostgreSQL 套件不需要升級。另一個優點是,如果在安裝過程中不需要建立時區資料庫檔案,則可以更直接地交叉編譯 PostgreSQL。

-Dextra_version=字串 #

字串 附加到 PostgreSQL 版本號碼。例如,您可以使用它來標記從未發布的 Git 快照或包含自訂程式碼修補程式的二進制檔案,並加上額外的版本字串,例如 git describe 識別碼或發行套件版本號碼。

-Drpath={ true | false } #

此選項預設設定為 true。如果設定為 false,請勿標記 PostgreSQL 的可執行檔,以表示它們應該在安裝的程式庫目錄中搜尋共用程式庫(請參閱 --libdir)。在大部分平台上,此標記使用程式庫目錄的絕對路徑,因此如果您稍後重新配置安裝,這將沒有幫助。但是,您需要提供其他方式讓可執行檔找到共用程式庫。通常這需要設定作業系統的動態連結器來搜尋程式庫目錄;請參閱 第 17.5.1 節 以取得更多詳細資訊。

-D二進制名稱=路徑 #

如果在非標準路徑中儲存建立 PostgreSQL 所需的程式(含或不含選用旗標),您可以手動將其指定給 meson configure。執行 meson configure 可以找到支援此功能的完整程式清單。範例

meson configure -DBISON=PATH_TO_BISON

17.4.3.5. 文件 #

請參閱 第 J.2 節 以取得建立文件所需的工具。

-Ddocs={ auto | enabled | disabled } #

啟用以 HTMLman 格式建立文件。預設為 auto。

-Ddocs_pdf={ auto | enabled | disabled } #

啟用以 PDF 格式建立文件。預設為 auto。

-Ddocs_html_style={ simple | website } #

控制使用的 CSS 樣式表。預設為 simple。如果設定為 website,HTML 文件將參照 postgresql.org 的樣式表。

17.4.3.6. 雜項 #

-Dpgport=數字 #

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

-Dkrb_srvnam=名稱 #

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

-Dsegsize=SEGSIZE #

設定 區段大小,單位為 GB。大型表格會分割成多個作業系統檔案,每個檔案的大小等於區段大小。這可以避免許多平台上存在的檔案大小限制問題。預設區段大小為 1 GB,在所有支援的平台上都是安全的。如果您的作業系統支援 大型檔案(現今大多數作業系統都支援),您可以使用較大的區段大小。這有助於減少在處理非常大型表格時消耗的檔案描述符數量。但請小心不要選擇大於平台和您打算使用的檔案系統支援的值。您可能想使用的其他工具,例如 tar,也可能會設定可用檔案大小的限制。建議(但並非絕對必要)此值為 2 的次方。

-Dblocksize=BLOCKSIZE #

設定區塊大小,單位為 KB。這是資料表中儲存和 I/O 的單位。預設為 8 KB,適用於大多數情況;但其他值可能適用於特殊情況。值必須介於 1 到 32(KB)之間的 2 的次方。

-Dwal_blocksize=BLOCKSIZE #

設定WAL 區塊大小,單位為 KB。這是 WAL 記錄中儲存和 I/O 的單位。預設為 8 KB,適用於大多數情況;但其他值可能適用於特殊情況。值必須介於 1 到 64(KB)之間的 2 的次方。

17.4.3.7. 開發人員選項 #

本節中的大多數選項僅對開發或除錯 PostgreSQL 感興趣。不建議用於生產建置,但 --debug 除外,它可以在您不幸遇到錯誤時啟用詳細錯誤報告。在支援 DTrace 的平台上,-Ddtrace 也可能合理用於生產。

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

--buildtype=BUILDTYPE #

此選項可用於指定要使用的建置類型;預設為 debugoptimized。如果您希望對此選項提供的除錯符號和最佳化層級有更精細的控制,您可以參閱 --debug--optimization 旗標。

通常使用下列建置類型:plaindebugdebugoptimizedrelease。可以在 Meson 文件 中找到更多關於它們的資訊。

--debug #

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

--optimization=LEVEL #

指定最佳化層級。 LEVEL 可以設定為 {0,g,1,2,3,s} 中的任何一個。

--werror #

設定此選項會要求編譯器將警告視為錯誤。這對於程式碼開發很有用。

-Dcassert={ true | false } #

在伺服器中啟用斷言檢查,用於測試許多不可能發生的條件。這對於程式碼開發目的非常有價值,但測試會大幅降低伺服器的速度。此外,即使啟用測試,也不一定會增強伺服器的穩定性!斷言檢查未依嚴重性分類,因此即使是相對無害的錯誤,如果觸發斷言失敗,仍會導致伺服器重新啟動。不建議在實際環境中使用此選項,但您應該在開發工作或執行測試版時啟用它。

-Dtap_tests={ auto | enabled | disabled } #

使用 Perl TAP 工具啟用測試。預設為自動,需要安裝 Perl 和 Perl 模組 IPC::Run請參閱第 33.4 節以取得更多資訊。

-DPG_TEST_EXTRA=TEST_SUITES #

啟用需要特殊軟體才能執行的測試套件。此選項接受以空白分隔的清單作為引數。請參閱第 33.1.3 節以取得詳細資訊。

-Db_coverage={ true | false } #

如果使用 GCC,則所有程式和函式庫都使用程式碼覆蓋測試儀器編譯。執行時,它們會在建置目錄中產生包含程式碼覆蓋指標的檔案。 請參閱第 33.5 節以取得更多資訊。此選項僅供與 GCC 搭配使用,且僅在執行開發工作時使用。

-Ddtrace={ auto | enabled | disabled } #

啟用此選項會編譯 PostgreSQL 並支援動態追蹤工具 DTrace。 請參閱 第 28.5 節 以取得更多資訊。

若要指向 dtrace 程式,可以設定 DTRACE 選項。這通常有必要,因為 dtrace 通常安裝在 /usr/sbin 下,而這可能不在您的 PATH 中。

-Dsegsize_blocks=SEGSIZE_BLOCKS #

以區塊為單位指定關聯區段大小。如果同時指定 -Dsegsize 和此選項,則此選項優先。此選項僅供開發人員測試區段相關程式碼使用。

提交修正

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