之前要使用 PostgreSQL 的話必須要開啟 cygwin 的視窗來執行,但現在我們可以把它設成 windows xp 的服務,一開機時就啟動,這樣一來除了不用開視窗外,我們也無須手動來啟動服務。

在 cygwin 執行下列指令:

$ ipc-daemon --install-as-service
$ cygrunsrv --install Postmaster --path /usr/local/pgsql/bin/postmaster
    --args "-D /usr/local/pgsql/data -i" --dep ipc-daemon --termsig INT
    --user "Joseph S. Kuo" --shutdown

其中的 --user 後面填的是你安裝 cygwin 時的帳號名字,也就是具有系統管理者權限的帳號。輸入完後鍵入兩次密碼:
1.jpg

設定完成後你可以在「控制台->系統管理工具->服務」中看到兩個新增的服務:Cygwin IPC Daemon 和 Postmaster,其中後者需要前者已啟動後才能啟動,也就是說它們有相依性。雖然已經新增好了,但這不代表高枕無憂了。事實上我們還需要做一些事情才算真正完成,如果不 做下列步驟的話,這兩個服務永遠不會啟動。
2.png

3.jpg

首先在 cygwin 的視窗中執行:

$ cp /usr/bin/cygwin1.dll /usr/local/bin

當然你也可以直接在 windows 檔案總管中來複製。這樣的目的是為了 Cygwin IPC Daemon 服務能夠順利啟動。

第二步,把 c:\cygwin\usr\local\pgsql\lib\pq.dll 複製到 c:\windows 系統目錄下。如果你要複製到 c:\windows\system32 底下的話我想應該也可以,不過我並沒有實地測試過這樣是否可行。這個步驟是要讓 Postmaster 服務找得到 dll 檔來啟動,但是即使啟動了也會在中途結束掉,因為檔案存取權限的問題,導致服務無法順利開啟。所以第三步就是要更改檔案權限,在 cygwin 中執行:

$ chown "Joseph S. Kuo" /var/log/postmaster.log

把 log 檔的 owner 改成 cygwin 的 root,也就是之前所說的具有系統管理者權限的帳號。

做完以上步驟,那麼以後開機時 PostgreSQL 將會自動執行為 Windows XP 的服務,我們也就不用每次都要開啟 cygwin 來手工操作。我之前是在「開始->所有程式->啟動」中加入 cygwin 的捷徑,並且在 ~/.bashrc 下寫一個簡單的 shell script 來自動設定和執行 PostgreSQL。這樣雖然我不用在開機完後點選 cygwin 來啟動,但是仍然會多一個視窗在那裡礙眼。現在,我們可以不用忍受多出來的視窗了。

另外,如果你的電腦當機或重開機之後,你發現 Postmaster 服務並沒有順利啟動的話,找看看 c:\cygwin\usr\local\pgsql\data\postmaster.pid 是否存在。如果是,那麼就將它刪除,然後再啟動 Postmaster 一次,這樣應該就沒問題了。如果不是的話,那麼你可以看一下 /var/log/postmaster.log 中說了些什麼,也許可以找到問題的源頭。

想知道有多少資料庫連線正在使用中,或者是想知道服務是否已經啟動,但又不想從控制台的系統管理工具來點選服務的話,你可以在 cygwin 視窗中輸入:

$ ps

4.jpg

這樣會顯示出目前 cygwin 中使用的工作排程。若是你發現資料庫存取或寫入資料的部份突然有了問題,也可以來這樣看看是否已有過多的連線在使用中而沒有釋放,使得連線數用完而導致存取資料庫錯誤的問題。

(完)