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 都會檢測到更改並相應地重新生成。如果您有多個構建目錄,這尤其方便。通常其中一個用於開發(“debug”構建),而其他目錄僅偶爾使用(例如,“靜態分析”構建)。只需 cd
到相應的目錄並執行 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
子目錄中。預設值為 x
。DATADIR
/man
已採取措施,以便能夠將 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
下建立一個私有子目錄,用於動態載入的模組。
本節介紹的選項用於構建各種可選的 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 的最低版本是 14。預設停用。
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 認證。GSSAPI 需要安裝 MIT Kerberos。在許多系統上,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-ossp 模組(提供生成 UUID 的函式),使用指定的 UUID 庫。 LIBRARY
必須是以下之一:
none
不構建 uuid 模組。這是預設值。
bsd
使用 FreeBSD 和一些其他類 BSD 系統中找到的 UUID 函式。
e2fs
使用 e2fsprogs
專案建立的 UUID 庫;該庫在大多數 Linux 系統和 macOS 上都存在,也可以在其他平臺上獲取。
ossp
使用 OSSP UUID 庫。
-Dlibcurl={ auto | enabled | disabled }
#構建時支援 libcurl 以實現 OAuth 2.0 客戶端流。此功能需要 libcurl 版本 7.61.0 或更高版本。使用此選項構建將檢查所需的標頭檔案和庫,以確保您的 Curl 安裝足夠,然後再繼續。此選項的預設值為 auto。
-Dliburing={ auto | enabled | disabled }
#構建時支援 liburing,啟用 io_uring 支援非同步 I/O。預設為 auto。
要使用不在常見位置的 liburing 安裝,您可以設定 pkg-config
相關的環境變數(請參閱其文件)。
-Dlibnuma={ auto | enabled | disabled }
#構建時支援 libnuma 以實現基本的 NUMA 支援。僅在實現 libnuma 庫的平臺上受支援。此選項的預設值為 auto。
-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 庫的使用。它預設為 auto,並啟用 pg_dump、pg_restore 和 pg_basebackup 中對壓縮歸檔的支援,推薦使用。
--auto-features={ auto | enabled | disabled }
#設定此選項允許您覆蓋所有““auto
””功能的(自動啟用所需軟體時)值。當您想一次性停用或啟用所有““可選
””功能而無需手動設定每個功能時,這可能很有用。此引數的預設值是 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 describe
識別符號或發行包版本號)來標記從未釋出 Git 快照構建的二進位制檔案或包含自定義補丁的二進位制檔案。
-Drpath={ true | false }
#此選項預設設定為 true。如果設定為 false,則不會標記 PostgreSQL 的可執行檔案,指示它們應在安裝的庫目錄(請參閱 --libdir
)中搜索共享庫。在大多數平臺上,此標記使用庫目錄的絕對路徑,因此如果以後重新定位安裝,它將無用。但是,您需要提供其他方法使可執行檔案能夠找到共享庫。通常這需要配置作業系統的動態連結器來搜尋庫目錄;有關更多詳細資訊,請參閱第 17.5.1 節。
-DBINARY_NAME
=PATH
#如果構建 PostgreSQL(無論是否使用可選標誌)所需的程式儲存在非標準路徑中,您可以將其手動指定給 meson configure
。您可以透過執行 meson configure
來找到支援此選項的程式完整列表。示例:
meson configure -DBISON=PATH_TO_BISON
有關構建文件所需的工具,請參閱第 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 服務主體(principal)的預設名稱。postgres
是預設值。通常沒有理由更改此設定,除非您正在為 Windows 環境構建,在這種情況下,它必須設定為大寫的 POSTGRES
。
-Dsegsize=SEGSIZE
#設定 段大小(以 GB 為單位)。大表被分成多個作業系統檔案,每個檔案的大小等於段大小。這避免了許多平臺存在的與檔案大小限制相關的問題。預設段大小 1GB 在所有支援的平臺上都是安全的。如果您的作業系統支援““largefile
””支援(現在大多數都支援),您可以使用更大的段大小。這有助於減少處理非常大的表時消耗的檔案描述符數量。但請注意不要選擇大於您的平臺和您打算使用的檔案系統支援的值。您可能希望使用的其他工具,例如 tar,也可能對可用檔案大小設定限制。推薦(但不絕對要求)將此值設定為 2 的冪。
-Dblocksize=BLOCKSIZE
#設定 塊大小(以 KB 為單位)。這是表記憶體儲和 I/O 的單位。預設的 8KB 適用於大多數情況;但在特殊情況下,其他值可能有用。該值必須是 1 到 32(KB)之間的 2 的冪。
-Dwal_blocksize=BLOCKSIZE
#設定 WAL 塊大小(以 KB 為單位)。這是 WAL 日誌記憶體儲和 I/O 的單位。預設的 8KB 適用於大多數情況;但在特殊情況下,其他值可能有用。該值必須是 1 到 64(KB)之間的 2 的冪。
此部分中的大多數選項僅對開發或除錯 PostgreSQL 感興趣。不推薦在生產構建中使用它們,但 --debug
除外,它在不幸遇到 bug 時對於啟用詳細的 bug 報告很有用。在支援 DTrace 的平臺上,在生產中使用 -Ddtrace
也可能是合理的。
構建將用於在伺服器內部開發程式碼的安裝時,建議至少使用 --buildtype=debug
和 -Dcassert
選項。
--buildtype=BUILDTYPE
#此選項可用於指定要使用的構建型別;預設為 debugoptimized
。如果您希望對除錯符號和最佳化級別進行比此選項提供的更精細的控制,可以參考 --debug
和 --optimization
標誌。
通常使用的構建型別如下: plain
、debug
、debugoptimized
和 release
。有關它們的更多資訊可以在 Meson 文件中找到。
--debug
#使用除錯符號編譯所有程式和庫。這意味著您可以在偵錯程式中執行程式來分析問題。這會大大增加已安裝可執行檔案的大小,並且在非 GCC 編譯器上通常也會停用編譯器最佳化,導致效能下降。然而,有符號資訊對於處理可能出現的任何問題非常有幫助。目前,僅當您使用 GCC 時,才建議在生產安裝中使用此選項。但如果您正在進行開發工作或執行測試版,則應始終啟用它。
--optimization
=LEVEL
#指定最佳化級別。LEVEL
可以設定為 {0,g,1,2,3,s} 中的任何一個。
--werror
#設定此選項會要求編譯器將警告視為錯誤。這對於程式碼開發很有用。
-Dcassert={ true | false }
#在伺服器中啟用 斷言檢查,該檢查測試許多““不可能發生
””條件。這對於程式碼開發非常有價值,但測試會顯著降低伺服器速度。此外,啟用測試並不一定會提高伺服器的穩定性!斷言檢查未按嚴重程度進行分類,因此即使是相對無害的 bug,如果觸發斷言失敗,仍會導致伺服器重啟。不建議在生產環境中使用此選項,但在進行開發工作或執行測試版時應啟用它。
-Dtap_tests={ auto | enabled | disabled }
#使用 Perl TAP 工具啟用測試。預設為 auto,需要 Perl 安裝和 Perl 模組 IPC::Run
。有關更多資訊,請參閱第 31.4 節。
-DPG_TEST_EXTRA=TEST_SUITES
#啟用其他測試套件,這些套件預設不執行,因為它們在多使用者系統上執行不安全,需要特殊軟體才能執行,或者資源密集。引數是用於啟用測試的空格分隔列表。有關詳細資訊,請參閱第 31.1.3 節。如果執行測試時設定了 PG_TEST_EXTRA
環境變數,它將覆蓋此設定時間選項。
-Db_coverage={ true | false }
#如果使用 GCC,所有程式和庫都將使用程式碼覆蓋率測試插裝進行編譯。執行時,它們將在構建目錄中生成帶有程式碼覆蓋率指標的檔案。有關更多資訊,請參閱第 31.5 節。此選項僅與 GCC 結合用於開發工作。
-Ddtrace={ auto | enabled | disabled }
#啟用此選項將 PostgreSQL 與 DTrace 動態跟蹤工具的支援一起編譯。有關更多資訊,請參閱第 27.5 節。
要指向 dtrace
程式,可以設定 DTRACE
選項。這通常是必要的,因為 dtrace
通常安裝在 /usr/sbin
下,而該目錄可能不在您的 PATH
中。
-Dinjection_points={ true | false }
#使用注入點支援編譯 PostgreSQL 伺服器。注入點允許從伺服器內部的預定義程式碼路徑中執行使用者定義的程式碼。這有助於以受控方式進行測試和併發場景的研究。此選項預設停用。有關更多詳細資訊,請參閱第 36.10.14 節。此選項僅供開發人員用於測試。
-Dsegsize_blocks=SEGSIZE_BLOCKS
#以塊為單位指定關係段大小。如果同時指定了 -Dsegsize
和此選項,則此選項優先。此選項僅供開發人員用於測試段相關程式碼。
如果您在文件中看到任何不正確的內容、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。