概述
PostgreSQL 8.0.2 已經正式發布,該版本被官方建議廣泛使用,從8.0開始增加了對 Windows2K/XP 平台的直接支援,並隨安裝包附帶了 pgAdmin III 圖形介面的資料庫管理工具(開源),您可以通過該圖形管理介面建立數和操作據庫、資料表空間、模式(Schema)等各種資料庫物件。註:在本文中所引述的 PostgreSQL 均是指 8.0.2 for Windows 的版本。
安裝
安裝 Windows 版本的 PostgreSQL 伺服器是非常簡單的,首先從官方網站下載安裝包,然後執行 postgresql-8.0.msi 安裝檔案,跟著提示一步步走就可以了。其中需要設定 PostgreSQL 的Windows服務的密碼和超級使用者 postgres 的密碼,密碼均不可為空!另外,PostgreSQL 8.0.2 必須安裝在 NTFS 格式的分區中。
使用
安裝完成後,預設已經啟動了 PostgreSQL 的服務,您只需從“開始”-“程式”-“PostgreSQL 8.0”菜單中運行“pgAdmin III”即可使用圖形化管理介面進行各種資料庫操作了。
開發
一、對中文的支援
再建立資料庫時,建議指定編碼方式為:UNICODE(UTF-8),在用戶端連接字串中顯式指定 Encoding=UNICODE,否則可能出現讀寫多位元組字元時出現亂碼。
二、大小寫問題
由於 PostgreSQL 是大小寫敏感的,並預設對SQL語句中的資料庫物件名稱轉換為小寫,因此如果你在建立資料庫物件時指定了大小寫混和的對象名稱,那麼在通過SQL語句訪問這些對象時,必須使用雙引號(")將資料庫物件括起來,以提示 PostgreSQL 不用幫你轉換對象名為小寫,否則將激發“xxxxx對象不存在”的異常,譬如您的資料庫中有名為 TUser 的表,您在 PostgreSQL 內建的圖形化查詢工具中必須使用類似這樣的查詢語句才能正確執行:SELECT * FROM "TUser",當然它對 SQL 標準中的保留字和關鍵字是不區分大小寫,所以寫成 select * From "TUser" 這樣也是完全可以的。
另外,PostgreSQL 對資料也是大小寫敏感的,這點與 SQLServer 不同(SQLServer 預設是不敏感的),譬如在 TUser 表中有欄位 Name,其中有一行 Name 欄位值為“Tony Tang”的記錄,如果直接使用
SELECT * FROM "TUser" WHERE "Name" LIKE '%tony%';
是查詢不到這條記錄的,不過你可以這麼寫:
SELECT * FROM "TUser" WHERE UPPER("Name") LIKE '%TONY%';
呵呵,是不是覺得這樣不太好看,而且擔心效能會受影響?幸好 PostgreSQL 提供了關鍵字 ILIKE 來幫我們解決這個問題,這真是個非常有趣的關鍵字(I like),對於第一種寫法只需要將 LIKE 替換成 ILIKE 就可以了。
最後,建議在編寫 SQL 指令碼的時候,使用單引號做字串常量的標識,雖然在 MS SQLServer 中雙引號和單引號均可作為字串常量的標識符,但是在 PostgreSQL 中對此就有嚴格的功能區分(不能用雙引號作為字串常量的標識符),為了保險起見,建議對所有的資料庫物件名均使用雙引號(")將其顯式約定,以保證大小寫嚴格匹配。
三、.NET 開發問題
首先您可以從這裡下載 PostgreSQL 的 .NET Data Provider 程式,本文附帶提供的 Demo 是基於 Npgsql0.7beta5 開發的,對此需要特別說明的是,發布用戶端程式只需要附帶 Npgsql.dll 和 Mono.Security.Protocol.Tls.dll 這兩個動態庫就可以了,完全不需要再安裝任何其他 PostgreSQL 用戶端類庫! 真可謂綠色環保啊~
在 .NET 中通過 ADO.net 來訪問 PostgreSQL 資料庫簡直就是一種享受,尤其是那些習慣使用了 MS-SQL Server 的開發人員,因為無論編寫 PostgreSQL 的函數(預存程序)還是調用這些函數都和 SQLServer 大致一樣,尤其是對返回資料集的編碼方式與 SQLServer 完全一樣,根本沒有像訪問 Oracle 預存程序返回的資料集要使用引用遊標那樣麻煩,所以在這方面對這兩種資料庫存取碼的移植是非常容易的!
通過 DataAdapter 對象的 Fill 方法調用返回多個表的SQL操作,那麼它也會自動填滿相應的多個 DataTable 到 DataSet 中,這點與操作 MS-SQL Server 完全一樣。本文提供了 .NET 中操作 PostgreSQL 的範例,請從本文的範例下載部分去下載。
其他
通過『工作管理員』可以看到啟動了多個“postgres.exe”進程,請勿須驚慌,其中至少有四個是屬於 PostgreSQL 系統服務的進程,目前 Windows 版本的 PostgreSQL 由於代碼移植方面的問題,在多使用者串連時也會對應的建立多個該進程,不過我個人認為該特性或許會在後續的版本中改進(畢竟 for Windows 版本才剛發布),如果你打算現在就在商業產品中應用該資料庫,個人建議您使用 Linux/Unix 的版本。
預設情況下,您只能使用 127.0.0.1 來作為串連伺服器的地址,如果想要從其他機器串連,必須修改 PostgreSQL 伺服器上的 pg_hba.conf 和 postgresql.conf 這兩個設定檔中的內容,其位於 $PostgresSQL$\8.0\data 中。
總結
PostgreSQL 的高貴出身以及輝煌的曆史,加之它與生俱來的眾多企業資料庫的特性使得它成為開來源資料庫中最具商業化可能的一個,另外非常重要的一個是 PostgreSQL 眾多的開發介面非常利於開發人員對它的選用。開源之風已經吹入了資料庫這塊封閉的公司專屬應用程式的核心地區了,譬如《資料庫產品開源趨勢突顯 IBM甲骨文倍感壓力》,再則,公司專屬應用程式也開始紛紛考慮起跨平台(譬如《ERP的第三種選擇 》)了。
先且不論跨平台、使用開來源資料庫是否會降低公司專屬應用程式的總成本,但至少會給客戶多一種選擇,這無論是從市場開發還是應用適應的角度上講,都是非常有積極意義的。試想 Linux + Mono/.NET + PostgreSQL = ERP/Any Enterprise Applications,呵呵,這真是多麼令人激動的組合啊!
範例下載
- 範例資料庫:http://www.Zongsoft.com/Download/PostgreSQL_Demo_db.rar
- 執行檔案下載:http://www.Zongsoft.com/Download/PostgreSQL_Demo_bin.rar
- 原始碼下載:http://www.Zongsoft.com/Download/PostgreSQL_Demo_src.rar
PostgreSQL_Demo_db.rar 檔案中包含的 CreateDB.sql 是建立範常式序所需的資料庫的 SQL 指令檔,您可以在 psql 中執行如下命令來執行之:\i CreateDB.sql 或者通過執行裡面的 CreateDB.bat 來自動建立。
資源連結
- PostgreSQL 官方網站:http://www.postgreSQL.org
- PostgreSQL 中文網站:http://www.pgsqldb.org
- PostgreSQL 中文論壇:http://bbs.pgsqldb.com/index.php
- 《為什麼選用PostgreSQL,而不是Oracle?》