如果你認為postgresql伺服器僅僅是一個存儲系統,和它交流的唯一辦法就是通過sql語句,那麼你就嚴重了低估了它的特性。這僅僅是這個資料庫的特性之一。
postgresql伺服器是個強大的架構,它可以用來完成各種各樣的資料處理,甚至包括一些非資料伺服器的工作。它是一個伺服器平台,你可以在這個平台上對各種流行的程式設計語言開發的函數或庫進行簡單的組合與比對。我們來看一下這種複雜的多語言工作順序:
1)調用以perl編寫的字元串解析函數。
2)把字元串轉換成xslt,并使用javascript處理轉換結果。
3)從外部時間标記服務,比如www.guardtime.com,請求一個安全時間标記,并使用它們提供的c語言版本的sdk。
4)編寫python函數,用數字的形式表示結果。
以上流程可以借助幾種現成的伺服器程式設計語言,通過一系列簡單的函數調用來實作。為了完成這樣的工作,開發者僅僅需要調用一個postgresql函數,而不必在乎資料在語言和庫檔案之間是如何傳送的,比如:
本書會讨論postgresql伺服器程式設計的幾個方面。postgresql,如其他更強大的資料庫系統一樣,擁有所有原生的服務端程式設計特性,如觸發器,每當資料變更時,便進行自動化動作調用。同時,postgresql擁有獨有的特性,包括重寫内嵌行為的強大能力,也包括非常基礎的運算符。我們列舉這些定制功能。
使用c語言,編寫使用者定義函數(udf),來完成複雜的計算:
添加複雜的限制條件,確定伺服器中的資料滿足指導原則。
使用多種語言建立觸發器,針對其他表做出相應的變更,記錄各種動作,或者如果動作不符合一定的準則,禁止動作發生。
在資料庫中定義新的資料類型或運算符。
使用postgis包中定義的地形類型。
針對現存的或者新的資料類型,添加你自己的索引通路方法,來保證更高效的查詢操作。
對于這些特性,你又能做什麼呢?這裡有無限的可能,正如下面列出的這些:
編寫資料抽取函數,從結構化資料(如xml或json)中擷取最令人感興趣的部分,而不需要将全部(可能非常大)的文檔傳送到用戶端應用程式。
異步處理事件,比如在不拖慢主程式的情況下發送郵件。你可以為使用者資訊的改變建立一個郵件序列,這個序列被觸發器所控制。每當應用程式程序被通知的時候,獨立的郵件發送程序可以使用這些資料。
本章剩下的部分繼而對一系列通用資料管理任務進行了詳細闡述,展現了這些任務如何通過一個健壯而又優雅的伺服器程式設計方法得以解決。
盡管本章對所引用的示例僅作了較為簡單的備注,但所有例子均通過測試,可以正常運作。這些例子在這裡的主要作用僅是展示伺服器程式設計可以完成的各類事情。技術細節會在後續章節中進行進一步解釋。