PostgreSQL 可使用 Microsoft 的 Visual C++ 編譯器組建置。這些編譯器可以來自 Visual Studio、Visual Studio Express 或某些版本的 Microsoft Windows SDK。如果您尚未設定 Visual Studio 環境,最簡單的方法是使用 Visual Studio 2022 或 Windows SDK 10 中的編譯器,這兩個都是 Microsoft 的免費下載。
使用 Microsoft 編譯器組,可以建置 32 位元和 64 位元。32 位元 PostgreSQL 建置可以使用 Visual Studio 2015 至 Visual Studio 2022,以及獨立的 Windows SDK 版本 10 以上。64 位元 PostgreSQL 建置支援 Microsoft Windows SDK 版本 10 以上或 Visual Studio 2015 以上。
使用 Visual C++ 或 Platform SDK 建置的工具位於 src\tools\msvc 目錄中。建置時,請確定系統 PATH 中沒有 MinGW 或 Cygwin 的工具。此外,請確定 PATH 中有所有必要的 Visual C++ 工具。在 Visual Studio 中,啟動 Visual Studio 命令提示字元。如果您想要建置 64 位元版本,您必須使用命令的 64 位元版本,反之亦然。從 Visual Studio 2017 開始,可以使用 VsDevCmd.bat 從命令列執行此操作,請參閱 -help 以取得可用的選項及其預設值。 Visual Studio 2015 和更早版本中提供 vsvars32.bat 以達到相同目的。從 Visual Studio 命令提示字元,您可以使用 vcvarsall.bat 命令變更目標 CPU 架構、建置類型和目標作業系統,例如,vcvarsall.bat x64 10.0.10240.0 以目標 Windows 10 進行 64 位元發行版建置。請參閱 -help 以取得 vcvarsall.bat 的其他選項。所有命令都應該從 src\tools\msvc 目錄執行。
在建置之前,您可以建立 config.pl 檔案,以反映您想要變更的任何組態選項,或任何要使用的第三方程式庫路徑。完整的組態是透過先讀取和分析檔案 config_default.pl,然後套用 config.pl 中的任何變更來確定的。例如,若要指定 Python 安裝的位置,請將下列內容放入 config.pl
$config->{python} = 'c:\python310';
您只需要指定與 config_default.pl 中不同的參數。
如果您需要設定任何其他環境變數,請建立一個名為 buildenv.pl 的檔案,並將必要的指令放入其中。例如,當 bison 不在 PATH 中時,加入 bison 路徑,建立一個包含下列內容的檔案
$ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin';
傳遞其他命令列參數給 Visual Studio 建置指令 (msbuild 或 vcbuild)
$ENV{MSBFLAGS}="/m";
建置 PostgreSQL 需要下列其他產品。使用 config.pl 檔案指定程式庫可用的目錄。
如果您的建置環境未附帶支援版本的 Microsoft Windows SDK,建議您升級到最新版本 (目前為版本 10),可從 https://www.microsoft.com/download 下載。
您必須始終包含 SDK 的 Windows 標頭和程式庫 部分。如果您安裝包含 Visual C++ 編譯器 的 Windows SDK,則不需要 Visual Studio 即可建置。請注意,從版本 8.0a 開始,Windows SDK 不再附帶完整的命令列建置環境。
執行建置產生指令碼需要 ActiveState Perl。MinGW 或 Cygwin Perl 無法使用。它也必須存在於 PATH 中。可從 https://www.activestate.com 下載二進位檔 (注意:需要版本 5.14 或更新版本,免費的標準發行版就夠了)。
開始時不需要下列其他產品,但建置完整套件需要。使用 config.pl 檔案指定程式庫可用的目錄。
建置 PL/Tcl 需要 (注意:需要版本 8.4,免費的標準發行版就夠了)。
從 Git 建置需要 Bison 和 Flex,但從發行檔案建置時不需要。只有 Bison 版本 2.3 和更新版本才能使用。 Flex 必須是版本 2.5.35 或更新版本。
Bison 和 Flex 都包含在 msys 工具組中,可從 http://www.mingw.org/wiki/MSYS 作為 MinGW 編譯器組的一部分取得。
您需要將包含 flex.exe 和 bison.exe 的目錄加入 buildenv.pl 中的 PATH 環境變數,除非它們已經在 PATH 中。如果是 MinGW,目錄就是 MinGW 安裝目錄的 \msys\1.0\bin 子目錄。
GnuWin32 的 Bison 發行版似乎有一個錯誤,會導致 Bison 在安裝在名稱中有空格的目錄中 (例如英文安裝的預設位置 C:\Program Files\GnuWin32) 時發生故障。考慮安裝到 C:\GnuWin32 或在 PATH 環境設定中使用 GnuWin32 的 NTFS 短名稱路徑 (例如 C:\PROGRA~1\GnuWin32)。
Diff 是執行回歸測試的必要條件,可從 http://gnuwin32.sourceforge.net 下載。
Gettext 是建置 NLS 支援的必要條件,可從 http://gnuwin32.sourceforge.net 下載。請注意,二進位檔、相依性及開發人員檔案都是必要的。
GSSAPI 驗證支援的必要條件。MIT Kerberos 可從 https://web.mit.edu/Kerberos/dist/index.html 下載。
XML 支援的必要條件。二進位檔可從 https://zlatkovic.com/pub/libxml 下載,或從 http://xmlsoft.org 下載原始碼。請注意,libxml2 需要 iconv,可從相同的下載位置取得。
支援 LZ4 壓縮的必要條件。二進位檔和原始碼可從 https://github.com/lz4/lz4/releases 下載。
支援 Zstandard 壓縮的必要條件。二進位檔和原始碼可從 https://github.com/facebook/zstd/releases 下載。
SSL 支援的必要條件。二進位檔可從 https://slproweb.com/products/Win32OpenSSL.html 下載,或從 https://www.openssl.org 下載原始碼。
UUID-OSSP 支援的必要條件(僅限貢獻)。原始碼可從 http://www.ossp.org/pkg/lib/uuid/ 下載。
建置 PL/Python 的必要條件。二進位檔可從 https://python.club.tw 下載。
在 pg_dump 和 pg_restore 中壓縮支援的必要條件。二進位檔可從 https://www.zlib.net 下載。
PostgreSQL 僅會在 64 位元 Windows 上為 x64 架構建置。
不支援在同一個建置樹中混合 32 位元和 64 位元版本。建置系統會自動偵測它是在 32 位元或 64 位元環境中執行,並相應地建置 PostgreSQL。因此,在建置之前啟動正確的命令提示字元非常重要。
若要使用伺服器端第三方程式庫,例如 Python 或 OpenSSL,此程式庫必須也是 64 位元的。不支援在 64 位元伺服器中載入 32 位元程式庫。PostgreSQL 支援的許多第三方程式庫可能只有 32 位元版本,在這種情況下,它們無法與 64 位元 PostgreSQL 一起使用。
若要在發行版本組態(預設值)中建置所有 PostgreSQL,請執行命令
build
若要在偵錯版本組態中建置所有 PostgreSQL,請執行命令
build DEBUG
若要只建置單一專案,例如 psql,請執行下列指令
build psqlbuild DEBUG psql
若要將預設建置組態變更為偵錯,請將下列內容放入 buildenv.pl 檔案中
$ENV{CONFIG}="Debug";
也可以在 Visual Studio GUI 內部建置。在這種情況下,您需要執行
perl mkvcbuild.pl
從命令提示字元,然後在 Visual Studio 中開啟產生的 pgsql.sln(在原始碼樹的根目錄中)。
大部分時間,Visual Studio 中的自動相依性追蹤會處理已變更的檔案。但如果有大幅變更,您可能需要清除安裝。為此,只要執行 clean.bat 指令,它會自動清除所有產生的檔案。您也可以使用 dist 參數執行它,這種情況下它會像 make distclean 一樣運作,並移除 flex/bison 輸出檔案。
預設情況下,所有檔案都會寫入 debug 或 release 目錄的子目錄中。若要使用標準配置安裝這些檔案,並產生初始化和使用資料庫所需的檔案,請執行指令
install c:\destination\directory
如果您只想安裝用戶端應用程式和介面程式庫,可以使用這些指令
install c:\destination\directory client
若要執行回歸測試,請確定您已先完成所有必要部分的建置。此外,請確定系統路徑中存在載入系統所有部分所需的 DLL(例如,程序語言的 Perl 和 Python DLL)。如果沒有,請透過 buildenv.pl 檔案設定。若要執行測試,請從 src\tools\msvc 目錄執行下列指令之一
vcregress checkvcregress installcheckvcregress plcheckvcregress contribcheckvcregress modulescheckvcregress ecpgcheckvcregress isolationcheckvcregress bincheckvcregress recoverycheckvcregress taptest
若要變更使用的排程(預設為平行),請將其附加到指令列,如下所示
vcregress check serial
vcregress taptest 可用於執行目標目錄的 TAP 測試,如下所示
vcregress taptest src\bin\initdb\
有關回歸測試的詳細資訊,請參閱 第 33 章。
使用 vcregress bincheck 在用戶端程式上執行回歸測試,使用 vcregress recoverycheck 在復原測試上執行,或使用 vcregress taptest 指定的 TAP 測試需要安裝其他 Perl 模組
截至撰寫本文為止,IPC::Run 未包含在 ActiveState Perl 安裝中,也不在 ActiveState Perl 套件管理員 (PPM) 函式庫中。若要安裝,請從 CPAN 中下載 IPC-Run-<version>.tar.gz 原始檔,網址為 https://metacpan.org/dist/IPC-Run,然後解壓縮。編輯 buildenv.pl 檔案,並新增一個 PERL5LIB 變數,指向從解壓縮的檔案中提取的 lib 子目錄。例如
$ENV{PERL5LIB}=$ENV{PERL5LIB} . ';c:\IPC-Run-0.94\lib';
使用 vcregress 執行的 TAP 測試支援環境變數 PROVE_TESTS,會使用指定的命名模式自動擴充,以及 PROVE_FLAGS。這些變數可以在 Windows 終端機上設定,然後再執行 vcregress
set PROVE_FLAGS=--timer --jobs 2 set PROVE_TESTS=t/020*.pl t/010*.pl
也可以在 buildenv.pl 中設定這些參數
$ENV{PROVE_FLAGS}='--timer --jobs 2'
$ENV{PROVE_TESTS}='t/020*.pl t/010*.pl'
此外,TAP 測試的行為可以透過一組環境變數來控制,請參閱 第 33.4.1 節。
有些 TAP 測試依賴於一組外部指令,這些指令會選擇性地觸發與它們相關的測試。這些變數中的每一個變數都可以在 buildenv.pl 中設定或取消設定
GZIP_PROGRAM指向 gzip 指令的路徑。預設值為 gzip,它會在設定的 PATH 中搜尋具有該名稱的指令。
LZ4指向 lz4 指令的路徑。預設值為 lz4,它會在設定的 PATH 中搜尋具有該名稱的指令。
OPENSSL指向 openssl 指令的路徑。預設值為 openssl,它會在設定的 PATH 中搜尋具有該名稱的指令。
TAR指向 tar 指令的路徑。預設值為 tar,它會在設定的 PATH 中搜尋具有該名稱的指令。
ZSTD指向 zstd 指令的路徑。預設值為 zstd,它會在設定的 PATH 中搜尋具有該名稱的指令。
如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步說明的地方,請使用 此表單 報告文件問題。