Windows版本的PostgresQL安裝過程較為複雜(本文特指8.0.3以下版本),官方使用了pginstaller將PostgresQL打為一個msi包,單獨安裝問題不大,但是有以下幾個問題:
1、遠端桌面安裝相容性差(目前官方的說法是除了win2003都有問題)
2、無法隨程式打包
3、安裝後的建庫工作會受到分區格式的影響
針對以上問題,現給出如下解決方案:
A、在隨便一台機器上裝好pgsql,並且建好庫、導好資料
B、將整個pgsql的安裝好的目錄複寫到一個臨時檔案夾(例如d:\temp),應該包括:
bin、data、include、lib、share等,視情況可以考慮加入pgadminIII
C、在臨時檔案夾中建立dll目錄,包括以下5個檔案:
libeay32.dll/libiconv-2.dll/libintl-2.dll/libpq.dll/ssleay32.dll
(都可以在安裝好的機器中找到)
D、網上去找個ntright.exe檔案,放在bin目錄裡(隨便放哪,但是後面安裝完成最好刪掉)
——修正:網上再去找個netuser.exe,放在bin目錄裡
——感謝canders兄的提醒,之前沒考慮到使用者帳號到期問題
E、在臨時檔案夾中建立setup.bat檔案,內容如下:
REM 建立postgres使用者,用來管理服務
net user postgres [passwd] /add /PASSWORDCHG:NO
REM 讓postgres使用者不屬於users組,官方說不安全
net localgroup users postgres /delete
REM 設定postgres使用者密碼永不到期,技巧!!
.\bin\netuser postgres /pwnexp:y
REM 拷貝檔案,力氣活
copy .\dll\*.* %windir%\system32 /Y
REM 賦予postgres使用者logon as service許可權,技巧!!
REM 插一句廢話,ntrights.exe的參數列表裡沒有我用的這個
.\bin\ntrights.exe -u postgres +r SeServiceLogonRight
REM 以下摘自pginstaller源檔案,照做,主要是postgres使用者的檔案許可權
REM 其實是給ntfs用的,xp在fat32格式時會報錯,無視!
cacls . /E /T /D postgres
cacls . /E /T /G postgres:R
cacls .\data /E /T /P postgres:C
REM 建立PostgresQL服務,不要加入-L,注意%CD%的用法
REM 否則事件檢視器將變成windows寫情書給你的地方
.\bin\pg_ctl register -N PgSQL -U postgres -P [passwd] -D "%CD%/data"
REM 啟動剛才建好的服務
net start PgSQL
F、把整個臨時目錄打包分發,解壓後只要運行setup.bat就完事大吉
G、有經驗的朋友可以在bat中加入條件判斷或者其他標誌,我就偷懶了
註:在win2000、winxp、win2003 (ntfs、fat32、遠端桌面、中文父資料夾)下通過測試