支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4

17.7. 平台特定注意事項 #

本節記錄有關 PostgreSQL 安裝和設定的其他平台特定問題。請務必閱讀安裝說明,特別是第 17.1 節。另外,也請查看第 31 章關於迴歸測試結果的解釋。

此處未涵蓋的平台沒有已知的平台特定安裝問題。

17.7.1. Cygwin #

可以使用 Cygwin(一種適用於 Windows 的類 Linux 環境)來建置 PostgreSQL,但該方法不如原生 Windows 建置,並且不再建議在 Cygwin 下執行伺服器。

從原始碼建置時,請按照 Unix 風格的安裝程序進行(即,./configure; make; 等),並注意以下 Cygwin 特定的差異

  • 設定您的路徑,以便在使用 Windows 公用程式之前先使用 Cygwin bin 目錄。這將有助於防止編譯問題。

  • 不支援 adduser 命令;請在 Windows 上使用適當的使用者管理應用程式。否則,跳過此步驟。

  • 不支援 su 命令;請使用 ssh 在 Windows 上模擬 su。否則,跳過此步驟。

  • 不支援 OpenSSL

  • 啟動 cygserver 以取得共用記憶體支援。為此,請輸入命令 /usr/sbin/cygserver &。每次啟動 PostgreSQL 伺服器或初始化資料庫叢集 (initdb) 時,都需要執行此程式。可能需要變更預設的 cygserver 組態(例如,增加 SEMMNS),以防止 PostgreSQL 因系統資源不足而失敗。

  • 在某些使用非 C 地區設定的系統上,建置可能會失敗。若要修正此問題,請在建置之前使用 export LANG=C.utf8 將地區設定設為 C,然後在安裝 PostgreSQL 後將其設回先前的設定。

  • 由於超出 listen() 後端佇列,導致連線遭到拒絕的錯誤或停滯,平行迴歸測試 (make check) 可能會產生虛假的迴歸測試失敗。您可以使用 make 變數 MAX_CONNECTIONS 限制連線數,如下所示

    make MAX_CONNECTIONS=5 check
    

    (在某些系統上,您最多可以同時擁有約 10 個連線。)

可以將 cygserver 和 PostgreSQL 伺服器安裝為 Windows NT 服務。如需有關如何執行此操作的資訊,請參閱 PostgreSQL 二進位套件隨附在 Cygwin 上的 README 文件。它安裝在目錄 /usr/share/doc/Cygwin 中。

17.7.2. macOS #

若要在 macOS 上從原始碼建置 PostgreSQL,您需要安裝 Apple 的命令列開發人員工具,可以透過發出以下命令來完成

xcode-select --install

(請注意,這將彈出一個 GUI 對話方塊視窗以進行確認)。您可能也希望安裝 Xcode。

在最新的 macOS 版本上,必須將 sysroot 路徑嵌入用於尋找某些系統標頭檔的 include 參數中。這會導致 configure 指令碼的輸出根據 configure 期間使用的 SDK 版本而有所不同。這在簡單的情況下不應造成任何問題,但如果您嘗試執行一些操作,例如在與建置伺服器程式碼不同的機器上建置擴充功能,您可能需要強制使用不同的 sysroot 路徑。若要執行此操作,請設定 PG_SYSROOT,例如

make PG_SYSROOT=/desired/path all

若要找出機器上的適當路徑,請執行

xcrun --show-sdk-path

請注意,不建議使用與建置核心伺服器不同的 sysroot 版本來建置擴充功能;在最糟的情況下,可能會導致難以偵錯的 ABI 不一致。

您也可以在設定時選取非預設的 sysroot 路徑,方法是將 PG_SYSROOT 指定給 configure

./configure ... PG_SYSROOT=/desired/path

這主要用於交叉編譯其他 macOS 版本。無法保證產生的可執行檔將在目前主機上執行。

若要完全取消 -isysroot 選項,請使用

./configure ... PG_SYSROOT=none

(任何不存在的路徑名稱都有效)。如果您希望使用非 Apple 編譯器進行建置,這可能會很有用,但請注意,PostgreSQL 開發人員未測試或支援這種情況。

macOS系統完整性保護 (SIP) 功能會中斷 make check,因為它會阻止將所需的 DYLD_LIBRARY_PATH 設定傳遞到正在測試的可執行檔。您可以先執行 make install,然後再執行 make check 來解決此問題。不過,大多數 PostgreSQL 開發人員只是關閉 SIP。

17.7.3. MinGW #

可以使用 MinGW(適用於 Microsoft 作業系統的類 Unix 建置環境)來建置適用於 Windows 的 PostgreSQL。MinGW 建置程序使用本章所述的正常建置系統。

MinGW,類似 Unix 的建置工具,以及 MSYS,運行 shell script(如 configure)所需的一系列 Unix 工具,可以從 http://www.mingw.org/ 下載。兩者都不需要運行最終的二進制檔案;它們僅用於建立二進制檔案。

要使用 MinGW 建置 64 位元的二進制檔案,請從 https://mingw-w64.org/ 安裝 64 位元工具集,將其 bin 目錄放入 PATH 環境變數中,並使用 --host=x86_64-w64-mingw32 選項運行 configure

在您安裝好所有東西之後,建議您在 CMD.EXE 下運行 psql,因為 MSYS console 存在緩衝問題。

17.7.3.1. 收集 Crash Dump #

如果 Windows 上的 PostgreSQL 當機,它可以產生 minidump,可用於追蹤當機原因,類似於 Unix 上的 core dump。這些 dump 可以使用 Windows Debugger ToolsVisual Studio 讀取。要在 Windows 上啟用 dump 產生,請在叢集資料目錄中建立一個名為 crashdumps 的子目錄。然後,dump 將被寫入此目錄中,並具有基於崩潰進程標識符和當前崩潰時間的唯一名稱。

17.7.4. Solaris #

PostgreSQL 在 Solaris 上受到良好支持。您的操作系統越新,您遇到的問題就越少。

17.7.4.1. 所需工具 #

您可以使用 GCC 或 Sun 的編譯器套件進行建置。為了獲得更好的代碼優化,強烈建議在 SPARC 架構上使用 Sun 的編譯器。如果您使用的是 Sun 的編譯器,請注意不要選擇 /usr/ucb/cc;而要使用 /opt/SUNWspro/bin/cc

您可以從 https://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/ 下載 Sun Studio。許多 GNU 工具已整合到 Solaris 10 中,或者存在於 Solaris companion CD 中。如果您需要舊版本 Solaris 的套件,可以在 http://www.sunfreeware.com 找到這些工具。如果您喜歡原始碼,請查看 https://gnu.dev.org.tw/prep/ftp

17.7.4.2. configure 抱怨測試程式失敗 #

如果 configure 抱怨測試程式失敗,這可能是由於運行時鏈接器無法找到某些函式庫,可能是 libz、libreadline 或其他非標準函式庫,例如 libssl。要將其指向正確的位置,請在 configure 命令行上設置 LDFLAGS 環境變數,例如:

configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"

有關更多信息,請參閱 ld 手冊頁。

17.7.4.3. 編譯以獲得最佳性能 #

在 SPARC 架構上,強烈建議使用 Sun Studio 進行編譯。嘗試使用 -xO5 優化標誌來生成速度明顯更快的二進制檔案。不要使用任何修改浮點運算和 errno 處理行為的標誌(例如,-fast)。

如果在 SPARC 上沒有理由使用 64 位元的二進制檔案,則首選 32 位元版本。64 位元的操作較慢,並且 64 位元的二進制檔案比 32 位元的變體慢。另一方面,AMD64 CPU 系列上的 32 位元代碼不是原生代碼,因此 32 位元代碼在該 CPU 系列上速度明顯較慢。

17.7.4.4. 使用 DTrace 追蹤 PostgreSQL #

是的,可以使用 DTrace。有關更多信息,請參閱 第 27.5 節

如果您看到 postgres 可執行檔的鏈接因類似以下的錯誤訊息而中止:

Undefined                       first referenced
 symbol                             in file
AbortTransaction                    utils/probes.o
CommitTransaction                   utils/probes.o
ld: fatal: Symbol referencing errors. No output written to postgres
collect2: ld returned 1 exit status
make: *** [postgres] Error 1

您的 DTrace 安裝版本太舊,無法處理靜態函數中的 probes。您需要 Solaris 10u4 或更新版本才能使用 DTrace。

17.7.5. Visual Studio #

建議大多數用戶下載 Windows 的二進制發行版,可從 PostgreSQL 網站 https://postgresql.dev.org.tw/download/ 以圖形安裝程式包的形式提供。從原始碼建置僅適用於開發 PostgreSQL 或擴充功能的人員。

可以使用 Meson 建置適用於 Visual Studio 的 Windows 版 PostgreSQL,如 第 17.4 節 中所述。原生 Windows 移植需要 32 位元或 64 位元的 Windows 10 或更高版本。

psql 的原生版本不支持命令行編輯。Cygwin 版本支持命令行編輯,因此如果需要在 Windows 上進行交互式使用,則應使用它。

可以使用 Microsoft 的 Visual C++ 編譯器套件建置 PostgreSQL。這些編譯器可以來自 Visual StudioVisual Studio Express 或某些版本的 Microsoft Windows SDK。如果您尚未設置 Visual Studio 環境,最簡單的方法是使用來自 Visual Studio 2022Windows SDK 10 中的編譯器,這兩者都可以從 Microsoft 免費下載。

Microsoft 編譯器套件可以建置 32 位元和 64 位元的版本。可以使用 Visual Studio 2015Visual Studio 2022,以及獨立的 Windows SDK 發行版本 10 及更高版本來建置 32 位元的 PostgreSQL。使用 Microsoft Windows SDK 版本 10 及更高版本或 Visual Studio 2015 及更高版本支持建置 64 位元的 PostgreSQL。

如果您的建置環境未附帶受支持的 Microsoft Windows SDK 版本,建議您升級到最新版本(目前為版本 10),可從 https://www.microsoft.com/download 下載。

您必須始終包含 SDK 的 Windows Headers and Libraries 部分。如果安裝包含 Visual C++ CompilersWindows SDK,則無需 Visual Studio 即可進行建置。請注意,自版本 8.0a 起,Windows SDK 不再附帶完整的命令行建置環境。

17.7.5.1. 需求 #

在 Windows 上建置 PostgreSQL 需要以下其他產品。

Strawberry Perl

需要 Strawberry Perl 才能運行建置生成腳本。MinGW 或 Cygwin Perl 無法運作。它也必須存在於 PATH 中。可以從 https://strawberryperl.com 下載二進制檔案。

BisonFlex

需要 BisonFlex。 只有 Bison 2.3 及更高版本才可以使用。 Flex 必須是 2.5.35 或更高版本。

BisonFlex 都包含在 msys 工具套件中,可以從 http://www.mingw.org/wiki/MSYS 下載,作為 MinGW 編譯器套件的一部分。

您需要將包含 flex.exebison.exe 的目錄添加到 PATH 環境變數中。 如果是 MinGW,該目錄是 MinGW 安裝目錄下的 \msys\1.0\bin 子目錄。

注意

來自 GnuWin32 的 Bison 發行版似乎存在一個錯誤,當 Bison 安裝在名稱中包含空格的目錄中時,例如在英文安裝上的預設位置 C:\Program Files\GnuWin32,會導致 Bison 發生故障。 請考慮安裝到 C:\GnuWin32 中,或在您的 PATH 環境設定中使用 GnuWin32 的 NTFS 短名稱路徑(例如,C:\PROGRA~1\GnuWin32)。

以下額外的產品並非開始時必需,但建構完整的套件時需要。

Magicsplat Tcl

建構 PL/Tcl 所需。 二進位檔案可以從 https://www.magicsplat.com/tcl-installer/index.html 下載。

Diff

執行迴歸測試需要 Diff,可以從 http://gnuwin32.sourceforge.net 下載。

Gettext

需要 Gettext 才能使用 NLS 支援進行建構,可以從 http://gnuwin32.sourceforge.net 下載。 請注意,二進位檔案、相依性檔案和開發者檔案都需要。

MIT Kerberos

GSSAPI 身份驗證支援所需。 MIT Kerberos 可以從 https://web.mit.edu/Kerberos/dist/index.html 下載。

libxml2libxslt

XML 支援所需。 二進位檔案可以從 https://zlatkovic.com/pub/libxml 下載,或從 http://xmlsoft.org 下載原始碼。 請注意,libxml2 需要 iconv,可以從相同的下載位置獲得。

LZ4

支援 LZ4 壓縮所需。 二進位檔案和原始碼可以從 https://github.com/lz4/lz4/releases 下載。

Zstandard

支援 Zstandard 壓縮所需。 二進位檔案和原始碼可以從 https://github.com/facebook/zstd/releases 下載。

OpenSSL

SSL 支援所需。 二進位檔案可以從 https://slproweb.com/products/Win32OpenSSL.html 下載,或從 https://www.openssl.org 下載原始碼。

ossp-uuid

UUID-OSSP 支援所需(僅限 contrib)。 原始碼可以從 http://www.ossp.org/pkg/lib/uuid/ 下載。

Python

建構 PL/Python 所需。 二進位檔案可以從 https://www.python.org 下載。

zlib

pg_dumppg_restore 中的壓縮支援所需。 二進位檔案可以從 https://www.zlib.net 下載。

17.7.5.2. 64 位元 Windows 的特殊考量 #

PostgreSQL 僅在 64 位元 Windows 上為 x64 架構建構。

不支援在同一個建構樹中混合使用 32 位元和 64 位元版本。 建構系統會自動偵測它是否在 32 位元或 64 位元環境中執行,並據此建構 PostgreSQL。 因此,在建構之前啟動正確的命令提示字元非常重要。

若要使用伺服器端的第三方函式庫,例如 PythonOpenSSL,則此函式庫必須也是 64 位元的。 不支援在 64 位元伺服器中載入 32 位元函式庫。 PostgreSQL 支援的幾個第三方函式庫可能只有 32 位元版本,在這種情況下,它們不能與 64 位元 PostgreSQL 一起使用。

17.7.5.3. 收集當機傾印 #

如果 Windows 上的 PostgreSQL 當機,它可以產生 minidump,可用於追蹤當機原因,類似於 Unix 上的 core dump。這些 dump 可以使用 Windows Debugger ToolsVisual Studio 讀取。要在 Windows 上啟用 dump 產生,請在叢集資料目錄中建立一個名為 crashdumps 的子目錄。然後,dump 將被寫入此目錄中,並具有基於崩潰進程標識符和當前崩潰時間的唯一名稱。

提交更正

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