Chapter 33. 擴展 SQL

Table of Contents
33.1. 擴展性是如何實現的
33.2. PostgreSQL 類型系統
33.2.1. 基本類型
33.2.2. 復合類型
33.2.3.
33.2.4. 偽類型
33.2.5. 多態類型
33.3. 用戶定義函數
33.4. 查詢語言(SQL)函數
33.4.1. 基本類型上的 SQL 函數
33.4.2. 復合類型的SQL函數
33.4.3. 當做表數據源的 SQL 函數
33.4.4. 返回集合的 SQL 函數
33.4.5. 多態的 SQL 函數
33.5. 過程語言函數
33.6. 內部函數
33.7. C 語言函數
33.7.1. 動態裝載
33.7.2. 基本類型的 C 語言函數
33.7.3. C 語言函數的版本-0 調用風格
33.7.4. C 語言函數的版本-1調用風格
33.7.5. 書寫代碼
33.7.6. 編譯和鏈接動態鏈接的函數
33.7.7. 復合類型的 C 語言函數
33.7.8. 從 C 函數裡返回行(復合類型)
33.7.9. 從 C 語言函數裡返回集合
33.7.10. 多態參數和返回類型
33.8. 函數重載
33.9. 用戶定義聚集
33.10. 用戶定義類型
33.11. 用戶定義操作符
33.12. 操作符優化信息
33.12.1. COMMUTATOR
33.12.2. NEGATOR
33.12.3. RESTRICT
33.12.4. JOIN
33.12.5. HASHES
33.12.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
33.13. 擴展索引接口
33.13.1. 索引方法和操作符表
33.13.2. 索引方法策略
33.13.3. 索引方法支持過程
33.13.4. 例子
33.13.5. 操作符表的特殊特性

在本章的剩餘部分,我們將討論你如何通過增加下面幾種對象來擴展 PostgreSQL SQL 查詢語言:

33.1. 擴展性是如何實現的

PostgreSQL 是可擴展的是因為它的操作是表驅動的. 如果你熟悉標準的關系數據庫系統,你知道它們把與數據庫,表,字段 等信息存儲在一個被稱為系統表的地方.(有些系統稱這些為數據字典). 這些表在用戶面前表現為表,和其他表一樣,只不過 DBMS 把它自己內部的信息存放在此. PostgreSQL 和標準的關系型數據庫的系統表有一個關鍵區別是 PostgreSQL 在它的系統表裡面存儲了更多的信息: 不僅是關于表和列/字段的信息,而且還有關于它們的類型, 函數,訪問方式等的信息.這些表可以被用戶修改,而且由于 PostgreSQL 的內部操作是以這些表為基礎的,這就意味著 PostgreSQL 可以被用戶所擴展. 相比之下,傳統的數據庫系統只能通過修改 源代碼內部的硬代碼或裝載由 DBMS 供應商提供的特殊的模塊來擴展.

PostgreSQL 它還可以通過動態裝載的方法與用戶書寫的代碼偶合在一起. 也就是說,用戶可以把一個目標代碼文件 (例如,一個共享庫) 聲明為一個新類型或函數的實現, 這時 PostgreSQL 將根據需要裝載它們. 用 SQL 寫的代碼甚至更容易加入到服務器中去.這種可以 "在線"更改其操作的能力使 PostgreSQL 特別適合于新應用和新存儲結構的快速定型.