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

17.7. 特定平台注意事項 #

本節記載有關 PostgreSQL 安裝和設定的額外特定平台問題。務必閱讀安裝說明,特別是 第 17.1 節。另外,請查看 第 33 章,了解回歸測試結果的詮釋。

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

17.7.1. AIX #

您可以在 AIX 上使用 GCC 或原生 IBM 編譯器 xlc 建置 PostgreSQL

AIX 7.1 之前的版本不再受 PostgreSQL 社群測試或支援。

17.7.1.1. 記憶體管理 #

AIX 在記憶體管理方式方面有些特殊。您的伺服器可能有多個 GB 的 RAM 可用,但在執行應用程式時仍會發生記憶體不足或地址空間錯誤。一個範例是載入擴充功能時發生異常錯誤。例如,以 PostgreSQL 安裝擁有者的身分執行

=# CREATE EXTENSION plperl;
ERROR:  could not load library "/opt/dbs/pgsql/lib/plperl.so": A memory address is not in the address space for the process.

以非擁有者身分在擁有 PostgreSQL 安裝的群組中執行

=# CREATE EXTENSION plperl;
ERROR:  could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address

另一個範例是 PostgreSQL 伺服器記錄檔中出現記憶體不足錯誤,且每個記憶體配置接近或大於 256 MB 時都會失敗。

所有這些問題的根本原因是伺服器程序使用的預設位元和記憶體模型。預設情況下,在 AIX 上建置的所有二進位檔案都是 32 位元。這與使用的硬體類型或核心無關。這些 32 位元程序僅限於 4 GB 記憶體,並使用幾個模型之一以 256 MB 區段配置。預設值允許堆積中少於 256 MB,因為它與堆疊共用一個區段。

在上述 plperl 範例中,請檢查 umask 和 PostgreSQL 安裝中二進位檔案的權限。該範例中涉及的二進位檔案為 32 位元,並以模式 750 安裝,而非 755。由於權限是以這種方式設定,因此只有擁有者或擁有群組的成員才能載入函式庫。由於它不是世界可讀的,因此載入器會將物件放入程序的堆疊中,而不是共享函式庫區段(否則會將物件放入共享函式庫區段)。

解決此問題的「理想」方案是使用 64 位元版本的 PostgreSQL,但這並不總是可行的,因為具備 32 位元處理器的系統可以建置 64 位元二進位檔案,但無法執行這些二進位檔案。

如果需要 32 位元二進位檔案,請在啟動 PostgreSQL 伺服器之前將 LDR_CNTRL 設定為 MAXDATA=0xn0000000,其中 1 <= n <= 8,然後嘗試不同的值和 postgresql.conf 設定,以找出令人滿意的組態。使用 LDR_CNTRL 告訴 AIX 您希望伺服器為堆疊保留 MAXDATA 位元組,並以 256 MB 區段分配。當您找到可行的組態時,可以使用 ldedit 修改二進位檔案,以便預設使用所需的堆疊大小。PostgreSQL 也可以重新建置,傳遞 configure LDFLAGS="-Wl,-bmaxdata:0xn0000000" 以達到相同的效果。

對於 64 位元版本的建置,請將 OBJECT_MODE 設定為 64,並傳遞 CC="gcc -maix64"LDFLAGS="-Wl,-bbigtoc"configure。(xlc 的選項可能有所不同。)如果您省略 OBJECT_MODE 的匯出,您的建置可能會因連結器錯誤而失敗。設定 OBJECT_MODE 時,它會告訴 AIX 的建置公用程式(例如 arasld)預設處理哪種類型的物件。

預設情況下,可能會發生分頁空間的過度提交。雖然我們尚未看到這種情況發生,但 AIX 會在記憶體用盡且存取過度提交時終止程序。我們見過最接近這種情況的是,因為系統判斷沒有足夠的記憶體供另一個程序使用,所以 fork 失敗。與 AIX 的許多其他部分一樣,如果這成為問題,分頁空間配置方法和記憶體不足終止可以在系統或程序範圍內進行組態。

17.7.2. Cygwin #

PostgreSQL 可使用 Cygwin(Windows 的類 Linux 環境)來建置,但此方法不如原生 Windows 建置 (請參閱第 18 章,且不再建議在 Cygwin 下執行伺服器。

從原始碼建置時,請依循 Unix 風格的安裝程序(例如,./configure; make 等),並注意下列 Cygwin 特有的差異

  • 設定您的路徑,讓 Cygwin bin 目錄優先於 Windows 公用程式。這有助於防止編譯問題。

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

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

  • OpenSSL 不受支援。

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

  • 在使用 C 以外的區域設定時,建置可能會在某些系統上失敗。若要修復此問題,請在建置前將區域設定設為 C,方法為執行 export LANG=C.utf8,然後在安裝 PostgreSQL 之後再將其設回先前的設定。

  • 平行回歸測試 (make check) 可能會產生虛假的回歸測試失敗,原因是 listen() 佇列的延遲過長,導致連線拒絕錯誤或當機。您可以使用 make 變數 MAX_CONNECTIONS 來限制連線數,如下所示

    make MAX_CONNECTIONS=5 check
    

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

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

17.7.3. 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 不一致。

您也可以在設定時透過指定 PG_SYSROOTconfigure 來選取非預設的 sysroot 路徑

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

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

若要完全抑制 -isysroot 選項,請使用

./configure ... PG_SYSROOT=none

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

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

17.7.4. MinGW/原生 Windows #

PostgreSQL for Windows 可使用 MinGW(Microsoft 作業系統的類 Unix 建置環境)或 Microsoft 的 Visual C++ 編譯器組建來建置。MinGW 建置程序使用本章節中描述的正常建置系統;Visual C++ 建置的工作方式完全不同,並在 第 18 章 中描述。

原生 Windows 埠需要 32 或 64 位元的 Windows 2000 或更新版本。較早的作業系統沒有足夠的基礎架構(但可以在這些作業系統上使用 Cygwin)。類 Unix 建置工具 MinGW,以及執行 shell 指令碼(如 configure)所需的 Unix 工具集合 MSYS,可從 http://www.mingw.org/ 下載。執行產生的二進位檔不需要這兩個工具;它們僅用於建立二進位檔。

若要使用 MinGW 建置 64 位元二進位檔,請從 https://mingw-w64.org/ 安裝 64 位元工具組,將其 bin 目錄放入 PATH 中,並執行 configure,並使用 --host=x86_64-w64-mingw32 選項。

安裝好所有內容後,建議您在 CMD.EXE 下執行 psql,因為 MSYS 主控台有緩衝問題。

17.7.4.1. 在 Windows 上收集崩潰傾印 #

如果 Windows 上的 PostgreSQL 崩潰,它有能力產生 迷你傾印,可用於追蹤崩潰原因,類似於 Unix 上的核心傾印。這些傾印可以使用 Windows Debugger ToolsVisual Studio 讀取。若要在 Windows 上啟用傾印產生,請在叢集資料目錄內建立一個名為 crashdumps 的子目錄。然後,傾印將寫入此目錄,其唯一名稱基於崩潰程序的識別碼和崩潰的目前時間。

17.7.5. Solaris #

PostgreSQL 在 Solaris 上獲得良好的支援。您的作業系統越新,您遇到的問題就越少。

17.7.5.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 隨附的 CD 中。如果您需要較舊版本的 Solaris 的套件,您可以在 http://www.sunfreeware.com 找到這些工具。如果您偏好來源,請查看 https://www.gnu.org/prep/ftp

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

如果 configure 抱怨測試程式失敗,這可能是執行時期連結器無法找到某些函式庫,可能是 libz、libreadline 或其他非標準函式庫,例如 libssl。若要將其指向正確的位置,請在 configure 命令列中設定 LDFLAGS 環境變數,例如,

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

請參閱 ld 手冊頁以取得更多資訊。

17.7.5.3. 編譯以取得最佳效能 #

在 SPARC 架構上,強烈建議使用 Sun Studio 進行編譯。嘗試使用 -xO5 最佳化旗標來產生明顯更快速的二進位檔。請勿使用任何會修改浮點運算和 errno 處理行為的旗標(例如 -fast)。

如果您沒有理由在 SPARC 上使用 64 位元二進位檔,請優先使用 32 位元版本。64 位元運算較慢,且 64 位元二進位檔比 32 位元變體慢。另一方面,AMD64 CPU 系列上的 32 位元程式碼並非原生,因此 32 位元程式碼在該 CPU 系列上明顯較慢。

17.7.5.4. 使用 DTrace 追蹤 PostgreSQL #

是的,可以使用 DTrace。請參閱 第 28.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 安裝太舊,無法處理靜態函式中的探測。您需要 Solaris 10u4 或更新版本才能使用 DTrace。

提交更正

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