:::

XAMPP啟用PostgreSQL功能

12月 21, 2012 5 Comments Edit Post

20121220-205618

XAMPP是一套以Apache、PHP、MySQL組成的開發用套裝伺服器,但它並沒有內建PostgreSQL,在設定PostgreSQL的連線上也不是這麼直覺。

最近在架設開發環境的期間遇到了XAMPP無法順利啟用PostgreSQL連線的問題。經過一番研究,總算找出了解法。這篇就是介紹如何在XAMPP中啟用PostgreSQL的方法。


作業系統說明

image

我目前使用的作業系統是Windows 7 企業版,64位元。這篇的問題主要都是發生在Windows之中,Linux使用者應該不太容易遇到這個問題喔。

XAMPP與PostgreSQL的安裝

image

XAMPP使用的是XAMPP Portable 1.8.1

必須特別註明的是,儘管這是Portable可攜版本,但是目錄必須為「xampp」並放置在磁碟分割的根目錄下,例如「C:\xampp」或「D:\xampp」。我因為想嘗試不同版本而將資料夾命名為「xampp 1.8.1」之類的名詞,xampp就無法順利啟動。

PostgreSQL使用的是9.2.2版。網路上討論這個問題時通常看到的是8.x版本,所以我想版本應該不是問題。

XAMPP的部份

20121220-223634

剛安裝好XAMPP與PostgreSQL的時候,XAMPP裡面的PHP是無法順利連上PostgreSQL的,因為它預設並沒有打開pg_sql模組。

設定php.ini

php.ini是PHP的主要設定檔,它位於以下路徑:

[xampp]\php\php.ini

請以任意的文字編輯器開啟,並找到以下兩個PostgreSQL模組的選項:(兩者位於不同行,但很相近)

;extension=php_pdo_pgsql.dll
;extension=php_pgsql.dll

開啟模組的方法就是移除前面的註解符號「;」,修改之後如下:

extension=php_pdo_pgsql.dll
extension=php_pgsql.dll

20121220-205754

修改完成,請重新啟動Apache。

用XAMPP Control Panel來啟動XAMPP

image

最近幾版的XAMPP都有一個方便的控制版:XAMPP Control Panel,位於以下路徑:

[xampp]\xampp-control.exe

開啟之後就可以看到上圖的畫面。

如果要開啟Apache,點下Apache後面的「Start」按鈕就可以了。

缺少libpq.dll的問題

照理來說,照上面的步驟啟用PostgreSQL模組之後就能正常運作。但是實際上卻遇到了錯誤訊息:

20121220-205618

無法啟動程式,因為您的電腦遺失 LIBPQ.dll。請嘗試重新安裝修正這個問題。

不僅如此,還連帶地出現以下的錯誤警告:

20121220-205650

這個錯誤就是因為XAMPP沒有載入PostgreSQL重要的函式庫libpq.dll。

找到libpq.dll的位置

我安裝的時候,赫然發現XAMPP其實已經內建了libpq.dll。檔案位置如下:

[xampp]\php\libpq.dll

但是在Windows中就是無法自動載入,必須要手動設定才行。

在httpd-xampp.conf中載入libpq.dll

要載入libpq.dll則必須在Apache設定檔中加入LoadFile選項。

20121220-222657

網路上大部分都建議修改Apache的主要設定檔httpd.conf。但是httpd.conf很長、也有一定結構,我找了幾個地方塞進LoadFile,開啟Apache時都會發生錯誤,如上圖。

後來我發現XAMPP也在他們自己的設定檔httpd-xampp.conf使用了LoadFile,我們也可以在此設定載入libpq.dll。httpd-xampp.conf的檔案位置如下:

[xampp]\apache\conf\extra\httpd-xampp.conf

找到這一行設定:

LoadFile "/xampp/php/php5ts.dll"

在前面插入載入libpq.dlll的設定:

LoadFile "/xampp/php/libpq.dll"
LoadFile "/xampp/php/php5ts.dll"

20121220-223702

設定完的httpd-xampp.conf就如上圖。

image

這樣再開啟就不會出錯了。

檢測PHP是否啟用了PostgreSQL的功能

phpinfo()

image

要知道PHP到底有沒有啟用PostgreSQL,最簡單的方式就是來看phpinfo()的訊息。XAMPP內建一個網頁專門顯示phpinfo()資訊,開啟Apache之後請開啟以下網址:

搜尋看看「pg_sql」,應該可以看到模組的相關資訊,那就表示順利啟用。

用函式檢測是否有啟用PostgreSQL

另一個方法就是檢查PostgreSQL的函式能不能使用,能夠使用就表示PostgreSQL模組有順利啟用。PHP檢查函式的語法如下:

$postgresql_is_enable = function_exists("pg_connect");

我們就能透過$postggresql_is_enable來得知PostgreSQL是否有順利啟用。


結語:PostgreSQL真是小眾

postgresql_logo-1979px

作為知名的開發環境,XAMPP在支援PostgreSQL上卻是意外地薄弱。這個問題在網路上查詢的結果,有不少人都是叫你關掉pg_sql就好,實在是令人為PostgreSQL的小眾難過。

比起流行的MySQL,我仍然覺得PostgreSQL才是大型系統應該要使用的資料庫。不光是可以用於商業行為的BSD授權(MySQL商業使用要付費的啊,希望大家要有授權的觀念),transaction功能與豐富的資料型態也都是讓人愛不釋手。

在此還是呼籲一下PostgreSQL的重要性,希望大家多多重視這個重量級的資料庫吧!

總共5 則留言, (我要發問)

留言工具: