W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
這一節(jié)提供了考慮 PostgreSQL 安裝和設置的附加平臺相關的話題。確保閱讀安裝指導,特別是第 16.2 節(jié)。 同樣,檢查關于回歸測試結果解釋的第 32 章。
這里沒有覆蓋的平臺不存在平臺相關的安裝問題。
PostgreSQL 能在 AIX 上工作,但是AIX 6.1以前的版本有各種問題并且不推薦使用。你可以使用 GCC 或本地 IBM 編譯器xlc
。
AIX 的特別之處在于它的內存管理。你可能有一個裝備有好多個吉字節(jié)空閑 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位進程被限制在 4GB 的內存中,并被使用幾種模型之一安排成 256 MB 的段。該默認值允許在堆中低于 256 MB,因為它和棧共享一個單獨的段。
在plperl
的例子中,檢查你的 umask 和你的 PostgreSQL 安裝中的二進制的權限。這個例子中涉及的二進制是32位的并且被用模式 750 而不是 755 安裝。由于這種方式的權限設置,只有所有者或擁有組的成員可以載入該庫。因為它不是所有人可讀的,載入器將該對象放在進程的堆中而不是它應該被放入的共享庫段中。
這個問題的“理想的”解決方案是使用 PostgreSQL 的64位編譯,但是這不是總是實用的,因為有32位處理器的系統(tǒng)可以編譯64位二進制但是卻不能運行它。
如果想要一個 32 位二進制,在開始 PostgreSQL 服務器之前將LDR_CNTRL
設置為MAXDATA=0x
,其中 1 <= n <= 8,并且嘗試不同的值以及n
0000000postgresql.conf
設置來找一個能讓你滿意的配置。這種LDR_CNTRL
的使用告訴 AIX 你希望服務器留出MAXDATA
字節(jié)給堆,以 256 MB 的段分配。當你找到了一個可工作的配置時,ldedit
可以被用來修改二進制,這樣它們默認使用想要的堆尺寸。PostgreSQL
也可以被重新編譯,傳遞configure LDFLAGS="-Wl,-bmaxdata:0x
來達到相同的效果。n
0000000"
對于一個 64 位編譯,設置OBJECT_MODE
為 64 并且傳遞CC="gcc -maix64"
和LDFLAGS="-Wl,-bbigtoc"
給configure
(給xlc
的選項可能不同)。如果你省略
OBJECT_MODE
的輸出,你的編譯可能會因為鏈接器錯誤而失敗。當OBJECT_MODE
被設置時,它告訴 AIX 的編譯工具(如ar
、as
和ld
)默認要處理哪些對象類型。
默認情況下,過量使用頁面空間的情況可能會發(fā)生。不過我們還沒有看到過,當進程用盡內存并且出現了過量使用時 AIX 會殺死進程。我們見到過的最接近于此的是 fork 失敗,其原因是系統(tǒng)覺得已經沒有足夠的內存給另一個進程。和 AIX 的很多其他部分一樣,如果這成為了一個問題,頁面空間分配方法和耗盡內存導致的殺死在系統(tǒng)范圍或進程范圍是可以配置的。
PostgreSQL 可以使用 Cygwin 來編譯,它是用于 Windows 的一個類 Linux 環(huán)境,但是這種方法不如原生 Windows 編譯見第 17 章)并且我們已經不再推薦在 Cygwin 下運行一個服務器。
在從源代碼編譯時,按照UNIX風格安裝過程進行(即./configure;
make
; 等;只要注意下列 Cygwin 相關的區(qū)別:
將你的路徑設置為使用 Cygwin 的 bin 目錄并且把它放在 Windows 工具的前面。這將幫助避免很多編譯的問題。
不支持adduser
命令;使用 Windows NT、2000 或 XP 上的用戶管理應用來替代。否則,跳過這一步。
不支持su
命令;在 Windows NT、2000 或 XP 上使用 ssh 來模擬 su。否則,跳過這一步。
不支持 OpenSSL。
為共享內存支持啟動cygserver
。要這樣做,輸入命令/usr/sbin/cygserver &
。這個程序在你啟動 PostgreSQL 服務器或初始化一個數據集簇(initdb
)時的任何時刻都需要被運行。默認的cygserver
配置可能需要被更改(例如增加
SEMMNS
)來防止 PostgreSQL 因為缺少系統(tǒng)資源而失敗。
在某些不使用 C 區(qū)域的系統(tǒng)上編譯可能會失敗。要修復這個問題,通過在邊以前export LANG=C.utf8
把區(qū)域設置為 C,并且在安裝完 PostgreSQL 之后把區(qū)域恢復成之前的設置。
并行回歸測試(make check
)可能產生虛假的回歸測試錯誤,這是由于溢出的listen()
連接緩沖區(qū),它會導致連接拒絕錯誤或掛起。你可以使用MAX_CONNECTIONS
來限制連接數:
make MAX_CONNECTIONS=5 check
(在某些系統(tǒng)上你可以有大約 10 個同時連接。)
可以把cygserver
PostgreSQL 服務器安裝為 Windows NT 服務。關于如何這樣做的信息,請參考包含在 Cygwin 上 PostgreSQL 二進制包中的README
文檔。它被安裝在目錄/usr/share/doc/Cygwin
中。
在最新的macOS版本中,有必要將“sysroot”路徑嵌入用于查找某些系統(tǒng)頭文件的include選項中。這導致configure
腳本的輸出會有所不同,具體取決于在configure期間使用的SDK版本。
在簡單的情況下,這應該不會造成任何問題,但是,如果您要嘗試在與構建服務器代碼不同 的計算機上構建擴展程序,則可能需要強制使用其他sysroot路徑。為此,需要設置 PG_SYSROOT
,例如:
make PG_SYSROOT=/desired/path
all
要在您的計算機上找到合適的路徑,請運行
xcodebuild -version -sdk macosx Path
請注意,實際上不建議使用與構建核心服務器不同的sysroot版本構建擴展。 在最壞的情況下,它可能導致難以調試的ABI不一致。
您還可以在配置時選擇非默認的sysroot路徑,通過在 configure中指定PG_SYSROOT
:
./configure ... PG_SYSROOT=/desired/path
macOS的“系統(tǒng)完整性保護”(SIP) 功能破壞了make check
,因為它阻止通過 設置所需的DYLD_LIBRARY_PATH
傳遞給被測試的可執(zhí)行文件。 您可以通過在make check
之前執(zhí)行
make install
來解決此問題。 不過,大多數PostgreSQL開發(fā)人員關閉了SIP。
用于 Windows 的 PostgreSQL 可以使用 MinGW 編譯,它是一個用于微軟操作系統(tǒng)的類 Unix 的編譯環(huán)境。也可以使用微軟的Visual C++編譯器套件來編譯。 MinGW 編譯步驟使用本章中描述的正常編譯系統(tǒng);而 Visual C++ 編譯的工作完全不同并且在第 17 章/中描述。
原生 Windows 移植要求一個 Windows 2000 或更高的 32 或 64 位版本。早期的操作系統(tǒng)沒有足夠的基礎設施(但 Cygwin可以用在它們之上)。類 Unix 的編譯工具 MinGW 和 MSYS(一個 Unix 工具集合,用于運行如configure
之類的 shell 腳本)可以從http://www.mingw.org/下載。運行結果二進制兩者都需要,它們只在創(chuàng)建二進制時需要。
要使用 MinGW 編譯 64 位二進制,從http://mingw-w64.sourceforge.net/安裝 64 位工具。把它放在PATH
中的 bin 目錄,并且使用--host=x86_64-w64-mingw32
選項運行
configure
.
在你安裝完所有的東西之后,我們建議你在CMD.EXE
下運行psql,因為 MSYS 控制臺有緩沖問題。
如果 PostgreSQL 在 Windows 上崩潰,它有能力產生minidumps,這可以被用來追蹤崩潰發(fā)生的原因,這與 Unix 上的核心轉儲相似。這些轉儲可以被使用Windows Debugger Tools或Visual Studio讀取。要啟用在 Windows 上的轉儲生成,可在集簇數據目錄下創(chuàng)建一個名為
crashdumps
的子目錄。轉儲將被寫入到這個目錄,轉儲的名字基于崩潰進程的標識符和崩潰的當前時間來確定。
PostgreSQL 在 Solaris 上得到了很好的支持。你的操作系統(tǒng)越新,你將會碰到更少的問題。
你可以使用 GCC 或 Sun 的編譯器套件進行編譯。為了更好的代碼優(yōu)化,我們強烈推薦在 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://www.gnu.org/prep/ftp上找找。
如果configure
抱怨一個失敗的測試程序,可能的情況是運行時鏈接器無法找到某些庫,可能是libz、libreadline或某些其他非標準庫如 libssl。要向它指出正確的位置,在configure
命令行上設置LDFLAGS
環(huán)境變量,例如:
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
更多信息可見ld手冊頁。
在 SPARC 架構上,我們強烈推薦使用 Sun Studio來編譯。嘗試使用-xO5
優(yōu)化標志來生成顯著加快的二進制。不要使用任何修改浮點操作和errno
處理(例如-fast
)行為的標志。
如果你沒有理由要使用 SPARC 上的 64 位二進制,最好用 32 位版本。64 位操作較慢并且 64 位二進制比其 32 位變體要慢。在另一方面,AMD64 CPU 家族上的32 位代碼不是原生的,所以在那個 CPU 族中 32 位代碼要明顯地更慢。
是的,可以使用 DTrace。詳見第 27.5 節(jié)。
如果你看到postgres
可執(zhí)行程序的鏈接中斷并且報出下面的錯誤消息:
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 安裝太舊,無法處理靜態(tài)函數中的探測。你需要 Solaris 10u4 或更新的版本以使用DTrace。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: