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
詳細版本是本節的其餘部分。
配置
安裝程序的第一步是為您的系統配置建置樹,並選擇您想要的選項。 若要建立及配置建置目錄,您可以從 meson setup
指令開始。
meson setup build
setup 指令採用 builddir
和 srcdir
引數。 如果沒有提供 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 節中說明。
建置
預設情況下,Meson 使用 Ninja 建置工具。 若要使用 Meson 從原始碼建置 PostgreSQL,您只需在建置目錄中使用 ninja
指令即可。
ninja
Ninja 會自動偵測您電腦中的 CPU 數量,並相應地平行化自身。 您可以使用命令列引數 -j
來覆寫所使用的平行程序數量。
應該注意的是,在初始配置步驟之後,ninja
是您需要輸入以進行編譯的唯一指令。 無論您如何變更原始碼樹(除非將其移動到全新位置),Meson 都會偵測到變更並相應地重新產生自身。 如果您有多個建置目錄,這尤其方便。 其中一個通常用於開發(「偵錯」建置),而另一個則不時使用(例如「靜態分析」建置)。 任何配置都可以透過 cd'ing 到相應的目錄並執行 Ninja 來建置。
如果您想使用 Ninja 以外的後端進行建置,您可以使用 --backend
選項進行配置以選擇您想要使用的後端,然後使用 meson compile
進行建置。 若要瞭解有關這些後端和您可以提供給 Ninja 的其他引數的更多資訊,您可以參考 Meson 文件。
迴歸測試
如果您想在安裝新建置的伺服器之前對其進行測試,您可以在此時執行迴歸測試。 迴歸測試是一個測試套件,用於驗證 PostgreSQL 在您的機器上以開發人員預期的方式執行。 輸入
meson test
(這無法以 root 身份執行;請以非特權使用者身份執行。) 有關解讀測試結果的詳細資訊,請參閱 第 31 章。 您可以隨時發出相同的指令來重複此測試。
若要針對正在執行的 postgres 執行個體執行 pg_regress 和 pg_isolation_regress 測試,請指定 --setup running
作為 meson test
的引數。
安裝檔案
如果您要升級現有系統,請務必閱讀 第 18.6 節,其中包含有關升級叢集的說明。
建置 PostgreSQL 後,您可以只需執行 ninja install
指令來安裝它。
ninja install
這會將檔案安裝到 步驟 1 中指定的目錄中。 請確保您具有寫入該區域的適當權限。 您可能需要以 root 身份執行此步驟。 或者,您可以預先建立目標目錄並安排授予適當的權限。 標準安裝提供所有用戶端應用程式開發所需的標頭檔,以及伺服器端程式開發所需的標頭檔,例如以 C 撰寫的自訂函數或資料類型。
ninja install
應適用於大多數情況,但如果您想使用更多選項(例如 --quiet
以抑制額外的輸出),您也可以改用 meson install
。 您可以在 Meson 文件中瞭解有關 meson install 及其選項的更多資訊。
解除安裝: 若要取消安裝,您可以使用 ninja uninstall
指令。
清理: 安裝後,您可以使用 ninja clean
指令從原始碼樹中移除已建置的檔案,以釋放磁碟空間。
meson setup
選項 #以下說明 meson setup
的命令列選項。此清單並未詳盡列出所有選項(請使用 meson configure --help
以取得完整清單)。此處未涵蓋的選項適用於進階使用案例,並已記錄在標準的 Meson 文件中。這些參數也可以與 meson setup
一起使用。
這些選項控制 ninja install
(或 meson install
) 將檔案放置的位置。--prefix
選項(例如 第 17.4.1 節)足以應付大多數情況。如果您有特殊需求,可以使用本節中描述的其他選項來自訂安裝子目錄。但請注意,更改不同子目錄的相對位置可能會使安裝變得不可重新定位,這表示您將無法在安裝後移動它。(man
和 doc
位置不受此限制影響。)對於可重新定位的安裝,您可能需要使用稍後描述的 -Drpath=false
選項。
--prefix=PREFIX
#將所有檔案安裝在 PREFIX
目錄下,而不是 /usr/local/pgsql
(在基於 Unix 的系統上)或
(在 Windows 上)。實際檔案將安裝到各種子目錄中;永遠不會將任何檔案直接安裝到 目前磁碟機代號
:/usr/local/pgsqlPREFIX
目錄中。
--bindir=DIRECTORY
#指定可執行程式的目錄。預設值為
。PREFIX
/bin
--sysconfdir=DIRECTORY
#設定各種組態檔案的目錄,預設為
。PREFIX
/etc
--libdir=DIRECTORY
#設定安裝程式庫和動態載入模組的位置。預設值為
。PREFIX
/lib
--includedir=DIRECTORY
#設定安裝 C 和 C++ 標頭檔案的目錄。預設值為
。PREFIX
/include
--datadir=DIRECTORY
#設定已安裝程式使用的唯讀資料檔案的目錄。預設值為
。請注意,這與資料庫檔案將放置的位置無關。PREFIX
/share
--localedir=DIRECTORY
#設定安裝地區設定資料的目錄,特別是訊息翻譯目錄檔案。預設值為
。DATADIR
/locale
--mandir=DIRECTORY
#與 PostgreSQL 一起提供的 man page 將安裝在此目錄下的各自的 man
子目錄中。預設值為 x
。DATADIR
/man
已注意盡可能使 PostgreSQL 安裝到共用安裝位置(例如 /usr/local/include
)中,而不會干擾系統其餘部分的命名空間。首先,除非完全展開的目錄名稱已經包含字串 “postgres
” 或 “pgsql
”,否則字串 “/postgresql
” 會自動附加到 datadir
、sysconfdir
和 docdir
。例如,如果您選擇 /usr/local
作為前綴,則文件將安裝在 /usr/local/doc/postgresql
中,但如果前綴是 /opt/postgres
,則文件將安裝在 /opt/postgres/doc
中。用戶端介面的公共 C 標頭檔案安裝到 includedir
中,並且命名空間是乾淨的。內部標頭檔案和伺服器標頭檔案安裝到 includedir
下的私有目錄中。有關如何存取其標頭檔案的資訊,請參閱每個介面的文件。最後,如果適用,也會在 libdir
下建立私有子目錄,用於動態載入模組。
本節中描述的選項可啟用建置各種可選的 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 定序功能(請參閱 第 23.2 節)。預設為 auto,並且需要安裝 ICU4C 套件。ICU4C 目前所需的最低版本為 4.2。
-Dllvm={ auto | enabled | disabled }
#建置時支援基於 LLVM 的JIT編譯(請參閱 第 30 章)。這需要安裝 LLVM 程式庫。LLVM 目前所需的最低版本為 10。預設為停用。
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(加密) 連線。唯一支援的 LIBRARY
是 openssl
。這需要安裝 OpenSSL 套件。使用此選項進行建置將會檢查所需的標頭檔和程式庫,以確保您的 OpenSSL 安裝足以繼續進行。此選項預設為 auto。
-Dgssapi={ auto | enabled | disabled }
#建置時支援 GSSAPI 身份驗證。需要安裝 MIT Kerberos 才能使用 GSSAPI。在許多系統上,GSSAPI 系統(MIT Kerberos 安裝的一部分)並未安裝在預設搜尋的位置(例如,/usr/include
、/usr/lib
)。在這些情況下,PostgreSQL 將查詢 pkg-config
以偵測所需的編譯器和連結器選項。預設為 auto。meson configure
將檢查所需的標頭檔和程式庫,以確保您的 GSSAPI 安裝足以繼續進行。
-Dldap={ auto | enabled | disabled }
#建置時支援LDAP 身份驗證和連線參數查詢 (請參閱 第 32.18 節 和 第 20.10 節 以取得更多資訊)。在 Unix 上,這需要安裝 OpenLDAP 套件。在 Windows 上,使用預設的 WinLDAP 程式庫。預設為 auto。meson configure
將檢查所需的標頭檔和程式庫,以確保您的 OpenLDAP 安裝足以繼續進行。
-Dpam={ auto | enabled | disabled }
#-Dbsd_auth={ auto | enabled | disabled }
#建置時支援 BSD 身份驗證。(BSD 身份驗證框架目前僅在 OpenBSD 上可用。)預設為 auto。
-Dsystemd={ auto | enabled | disabled }
#建置時支援 systemd 服務通知。如果伺服器在 systemd 下啟動,這會改善整合,否則沒有影響;請參閱 第 18.3 節 以取得更多資訊。預設為 auto。需要安裝 libsystemd 及相關的標頭檔才能使用此選項。
-Dbonjour={ auto | enabled | disabled }
#建置時支援 Bonjour 自動服務探索。預設為 auto,並且需要在您的作業系統中支援 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 支援。預設為 auto。此功能需要 Libxml2 2.6.23 或更新版本。
若要使用位於不尋常位置的 libxml2 安裝,您可以設定與 pkg-config
相關的環境變數(請參閱其文件)。
-Dlibxslt={ auto | enabled | disabled }
#使用 libxslt 建置,啟用 xml2 模組來執行 XML 的 XSL 轉換。-Dlibxml
也必須指定。預設為 auto。
-Dselinux={ auto | enabled | disabled }
#使用 SElinux 支援建置,啟用 sepgsql 擴充功能。預設為 auto。
-Dreadline={ auto | enabled | disabled }
#允許使用 Readline 程式庫(以及 libedit)。此選項預設為 auto,並在 psql 中啟用命令列編輯和歷史記錄,強烈建議使用。
-Dlibedit_preferred={ true | false }
#將此設定為 true 會優先使用 BSD 授權的 libedit 程式庫,而不是 GPL 授權的 Readline。只有在您同時安裝了這兩個程式庫時,此選項才有意義;預設值為 false,即使用 Readline。
-Dzlib={ auto | enabled | disabled }
#啟用 Zlib 函式庫的使用。預設為自動,並啟用在 pg_dump、pg_restore 和 pg_basebackup 中對壓縮封存檔的支援,建議啟用此選項。
-Dspinlocks={ true | false }
#此選項預設設為 true;將其設為 false 將允許建置成功,即使 PostgreSQL 對於該平台沒有 CPU 自旋鎖支援。缺乏自旋鎖支援將導致非常差的效能;因此,只有在建置中止並通知您該平台缺乏自旋鎖支援時,才應變更此選項。如果需要在您的平台上建置 PostgreSQL 必須將此選項設為 false,請將此問題報告給 PostgreSQL 開發人員。
-Datomics={ true | false }
#此選項預設設為 true;將其設為 false 將停用 CPU 原子操作的使用。在缺乏此類操作的平台上,此選項不起作用。在確實有此類操作的平台上,停用原子操作將導致效能不佳。變更此選項僅適用於偵錯或進行效能比較。
--auto_features={ auto | enabled | disabled }
#設定此選項可讓您覆寫所有 「自動」功能的值(如果找到所需的軟體,則會自動啟用的功能)。當您想要一次停用或啟用所有「可選」功能,而不必手動設定每個功能時,這會很有用。此參數的預設值為 auto。
--backend=BACKEND
#Meson 使用的預設後端是 ninja,這對於大多數使用案例應該足夠了。但是,如果您想與 Visual Studio 完全整合,您可以將 BACKEND
設定為 vs
。
-Dc_args=OPTIONS
#此選項可用於將額外的選項傳遞給 C 編譯器。
-Dc_link_args=OPTIONS
#此選項可用於將額外的選項傳遞給 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=STRING
#將 STRING
附加到 PostgreSQL 版本號碼。 例如,您可以使用它來標記從未發佈的 Git 快照建置的二進制檔,或包含帶有額外版本字串的自定義修補程式,例如 git describe
標識符或發行套件發佈號碼。
-Drpath={ true | false }
#此選項預設設為 true。如果設為 false,則不要標記 PostgreSQL 的可執行檔,以指示它們應該在安裝的函式庫目錄中搜尋共享函式庫(請參閱 --libdir
)。在大多數平台上,此標記使用函式庫目錄的絕對路徑,因此如果您稍後重新定位安裝,它將無濟於事。但是,您需要提供一些其他方式讓可執行檔找到共享函式庫。通常,這需要配置作業系統的動態連結器來搜尋函式庫目錄;有關更多詳細資訊,請參閱第 17.5.1 節。
-DBINARY_NAME
=PATH
#如果建置 PostgreSQL (不論是否帶有可選旗標) 所需的程式儲存在非標準路徑,您可以手動將其指定給 meson configure
。可以透過執行 meson configure
找到支援此功能的完整程式清單。例如:
meson configure -DBISON=PATH_TO_BISON
請參閱 Section J.2 以取得建置文件所需的工具。
-Ddocs={ auto | enabled | disabled }
#啟用建置以下格式的文件:HTML和man格式。預設為 auto。
-Ddocs_pdf={ auto | enabled | disabled }
#啟用建置以下格式的文件:PDF格式。預設為 auto。
-Ddocs_html_style={ simple | website }
#控制使用哪個CSS樣式表。預設值為 simple
。如果設定為 website
,HTML 文件將會參考 postgresql.org 的樣式表。
-Dpgport=NUMBER
#將 NUMBER
設定為伺服器和用戶端的預設連接埠號碼。預設值為 5432。連接埠可以稍後隨時變更,但如果您在此指定,伺服器和用戶端都會編譯相同的預設值,這會非常方便。通常,選擇非預設值的唯一好理由是,您打算在同一台機器上執行多個 PostgreSQL 伺服器。
-Dkrb_srvnam=NAME
#GSSAPI 使用的 Kerberos 服務主體的預設名稱。postgres
是預設值。通常沒有理由變更此設定,除非您正在為 Windows 環境建置,在這種情況下,必須將其設定為大寫的 POSTGRES
。
-Dsegsize=SEGSIZE
#設定區段大小,以 GB 為單位。大型資料表會分成多個作業系統檔案,每個檔案的大小等於區段大小。這避免了許多平台上存在檔案大小限制的問題。預設區段大小為 1 GB,在所有支援的平台上都是安全的。如果您的作業系統支援「largefile」 (現在大多數都支援),您可以使用更大的區段大小。這有助於減少使用非常大的資料表時消耗的檔案描述元數量。但是請注意,選擇的值不要大於您的平台和您打算使用的檔案系統所支援的值。您可能想要使用的其他工具 (例如 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 的冪。
本節中的大多數選項僅適用於開發或偵錯 PostgreSQL。不建議用於生產建置,但 --debug
除外,萬一您遇到錯誤,它可以啟用詳細的錯誤報告。在支援 DTrace 的平台上,-Ddtrace
也可能適合在生產中使用。
建置將用於在伺服器內開發程式碼的安裝時,建議至少使用 --buildtype=debug
和 -Dcassert
選項。
--buildtype=BUILDTYPE
#此選項可用於指定要使用的建置類型;預設為 debugoptimized
。如果您想要比此選項提供的更精細地控制偵錯符號和最佳化等級,您可以參考 --debug
和 --optimization
旗標。
通常使用以下建置類型:plain
、debug
、debugoptimized
和 release
。有關它們的更多資訊可以在 Meson 文件中找到。
--debug
#使用偵錯符號編譯所有程式和函式庫。這表示您可以在偵錯器中執行這些程式來分析問題。這會大幅增加已安裝的可執行檔的大小,並且在非 GCC 編譯器上,通常也會停用編譯器最佳化,導致速度減慢。但是,擁有可用的符號對於處理可能發生的任何問題非常有幫助。目前,僅當您使用 GCC 時,才建議將此選項用於生產環境安裝。但是,如果您正在進行開發工作或執行 Beta 版本,則應始終啟用它。
--optimization
=LEVEL
#指定最佳化等級。LEVEL
可以設定為 {0,g,1,2,3,s} 中的任何一個。
--werror
#設定此選項會要求編譯器將警告視為錯誤。這對於程式碼開發可能很有用。
-Dcassert={ true | false }
#啟用伺服器中的斷言檢查,以測試許多“不可能發生”的狀況。這對於程式碼開發非常有價值,但這些測試會顯著降低伺服器的速度。此外,啟用這些測試不一定會提高伺服器的穩定性!斷言檢查沒有按嚴重程度分類,因此,即使是相對無害的錯誤,如果觸發斷言失敗,仍會導致伺服器重新啟動。不建議在生產環境中使用此選項,但您應該在開發工作或執行 Beta 版本時啟用它。
-Dtap_tests={ auto | enabled | disabled }
#啟用使用 Perl TAP 工具的測試。預設為 auto,並且需要安裝 Perl 和 Perl 模組 IPC::Run
。有關更多資訊,請參閱第 31.4 節。
-DPG_TEST_EXTRA=TEST_SUITES
#啟用需要特殊軟體才能執行的測試套件。此選項接受以空白分隔的列表作為參數。有關詳細資訊,請參閱第 31.1.3 節。
-Db_coverage={ true | false }
#如果使用 GCC,則所有程式和函式庫都會使用程式碼覆蓋率測試工具進行編譯。執行時,它們會在建置目錄中生成包含程式碼覆蓋率指標的檔案。有關更多資訊,請參閱第 31.5 節。此選項僅適用於 GCC 和進行開發工作時。
-Ddtrace={ auto | enabled | disabled }
#啟用此選項會使用對動態追蹤工具 DTrace 的支援來編譯 PostgreSQL。有關更多資訊,請參閱第 27.5 節。
要指向 dtrace
程式,可以設定 DTRACE
選項。這通常是必要的,因為 dtrace
通常安裝在 /usr/sbin
下,這可能不在您的 PATH
中。
-Dinjection_points={ true | false }
#使用對伺服器中注入點的支援來編譯 PostgreSQL。注入點允許從伺服器內的預定義程式碼路徑執行使用者定義的程式碼。這有助於測試和以受控方式調查並行場景。預設情況下,此選項處於停用狀態。有關更多詳細資訊,請參閱第 36.10.13 節。此選項僅供開發人員用於測試。
-Dsegsize_blocks=SEGSIZE_BLOCKS
#指定關係段大小(以區塊為單位)。如果同時指定 -Dsegsize
和此選項,則此選項優先。此選項僅供開發人員使用,以測試與段相關的程式碼。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表單來回報文件問題。