Chapter 31. 擴展 SQL

Table of Contents
31.1. 擴展性是如何實現的
31.2. PostgreSQL 類型系統
31.2.1. 基本類型
31.2.2. 復合類型
31.2.3.
31.2.4. 偽類型
31.2.5. 多態類型
31.3. 用戶定義函數
31.4. 查詢語言(SQL)函數
31.4.1. 基本類型上的 SQL 函數
31.4.2. 復合類型的SQL函數
31.4.3. 當做資料表資料源的 SQL 函數
31.4.4. 返回集合的 SQL 函數
31.4.5. 多態的 SQL 函數
31.5. 函數重載
31.6. 函數易失性範疇
31.7. 過程語言函數
31.8. 內部函數
31.9. C 語言函數
31.9.1. 動態裝載
31.9.2. 基本類型的 C 語言函數
31.9.3. C 語言函數的版本-0 調用風格
31.9.4. C 語言函數的版本-1調用風格
31.9.5. 書寫代碼
31.9.6. 編譯和鏈接動態鏈接的函數
31.9.7. 擴展的製作架構
31.9.8. 復合類型的 C 語言函數
31.9.9. 從 C 函數里返回行(復合類型)
31.9.10. 從 C 語言函數里返回集合
31.9.11. 多態參數和返回類型
31.10. 用戶定義聚集
31.11. 用戶定義類型
31.12. 用戶定義操作符
31.13. 操作符優化訊息
31.13.1. COMMUTATOR
31.13.2. NEGATOR
31.13.3. RESTRICT
31.13.4. JOIN
31.13.5. HASHES
31.13.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
31.14. 擴展索引接口
31.14.1. 索引方法和操作符資料表
31.14.2. 索引方法策略
31.14.3. 索引方法支援過程
31.14.4. 例子
31.14.5. 操作符資料表的特殊特性

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

31.1. 擴展性是如何實現的

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

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