Appendix D. SQL 兼容性

Table of Contents
D.1. 支持的特性
D.2. 不支持的特性

本節視圖描述 PostgreSQL 在多大 程度上遵循 SQL 標準。完全遵循標準或者是用一句完整的話來描述 對標準的兼容性都是非常復雜,並且沒有什麼很大用處的東西, 所以,我們在本節裡只是給出一個概述。

SQL 標準的正式名稱是 ISO/IEC 9705 "Database Language SQL" (譯注:沒有中文版。)標準的修改版會經常地發出;最近的一個版本是 在 1999 年出現的。那個版本被稱作 ISO/IEC 9075:1999,或者非正式 的稱作 SQL99。這個版本之前的是 SQL92。PostgreSQL 的開發力圖瞄準兼容標準最新的正式版本,只要這樣的兼容不會和傳統的 特性或者常識衝突。在我們寫到這裡的時候,(標準委員會)正在投票 建議新的標準的版本,如果這個標準通過了,那麼將會成為未來的 PostgreSQL 開發的兼容目標。

SQL92 為兼容性定義了三個特性集: 基本,中等,和完全。大多數聲稱兼容 SQL 標準 地數據庫產品都只是兼容基本級別,因為全部中等和完全的特性要麼是 太龐大,要麼就是和傳統的行為相衝突。

SQL99 定義了一個很大的獨立特性集合,而不是 SQL92那樣寬泛而又低效率的三個級別。 這些特性中的一個很大的子集形成"核心"特性, 它們是每種兼容 SQL 的實現必須提供的特性。其它的特性都是可選的。 有些可選的特性組合在一起形成"包",SQL 的實現可以 號稱遵循這些包,也就是聲稱遵循特定的特性組。

SQL99 標準也分裂成 5 部分: 框架,基礎,調用級別接口,永久存儲模塊,以及宿主語言綁定。 PostgreSQL 只覆蓋第一,二,和五部分。 第三部分類似于 ODBC 接口,第四部分類似于PL/pgSQL 變成語言,但是這兩部分都沒有特意進行準確地兼容。

在隨後地兩節裡,我們提供了PostgreSQL 所支持的這些特性地一個列表。 後面跟著一個在 SQL99 裡定義了但是在 PostgreSQL 裡還不支持的特性列表。 這兩個列表都是近似的:可能在列出為兼容的特性裡有一點點小的細節上的區別, 而很大部分的不支持的特性可能實際上已經實現了。文檔的主體總會是包含 有關哪些能用,哪些不能用的最準確的信息。

注意: 包含一個連字符的特性代碼表示一個子特性。因此, 如果不支持特定的子特性,那麼主特性也會列在不支持的特性, 即使我們支持其它的子特性也如此。

D.1. 支持的特性

標識符描述注解
B012核心嵌入的 C 
B021 直接的 SQL 
E011核心數值數據類型 
E011-01核心INTEGER 和 SMALLINT 數據類型 
E011-02核心REAL, DOUBLE PRECISON, 和 FLOAT 數據類型 
E011-03核心DECIMAL 和 NUMERIC 數據類型 
E011-04核心算術操作符 
E011-05核心數值比較 
E011-06核心在數值數據類型之間的隱含類型轉換 
E021核心字符數據類型 
E021-01核心CHARACTER 數據類型 
E021-02核心CHARACTER VARYING 數據類型 
E021-03核心字符文本 
E021-04核心CHARACTER_LENGTH 函數 
E021-05核心OCTET_LENGTH 函數 
E021-06核心SUBSTRING 函數 
E021-07核心字符連接 
E021-08核心UPPER 和 LOWER 函數 
E021-09核心TRIM 函數 
E021-10核心在字符數據類型之間的隱含類型轉換 
E021-11核心POSITION 函數 
E021-12核心字符比較 
E031核心標識符 
E031-01核心分隔的標識符 
E031-02核心小寫的標識符 
E031-03核心結尾的下劃線 
E051核心基本查詢聲明 
E051-01核心SELECT DISTINCT 
E051-02核心GROUP BY 子句 
E051-04核心GROUP BY 可以包含不在<選擇列表>裡的項 
E051-05核心選擇列表項的名字可以重命名要求使用 AS
E051-06核心HAVING 子句 
E051-07核心在選擇列表中有修飾的 * 
E051-08核心FROM 子句裡得關聯名 
E051-09核心在 FROM 子句裡重命名字段 
E061核心基本謂詞和搜索條件 
E061-01核心比較謂詞 
E061-02核心BETWEEN 謂詞 
E061-03核心帶一列數值的 IN 謂詞 
E061-04核心LIKE 謂詞 
E061-05核心LIKE 謂詞 ESCAPE 子句 
E061-06核心NULL 謂詞 
E061-07核心有修飾的比較謂詞 
E061-08核心EXISTS 謂詞 
E061-09核心比較謂詞裡的子查詢 
E061-11核心IN 謂詞裡面的子查詢 
E061-12核心有修飾的比較謂詞中的子查詢 
E061-13核心關聯子查詢 
E061-14核心搜索條件 
E071核心基本查詢表達式 
E071-01核心UNION DISTINCT 表操作符 
E071-02核心UNION ALL 表操作符 
E071-03核心EXCEPT DISTINCT 表操作符 
E071-05核心通過表操作符組合的字段不必是完全相同的數據類型 
E071-06核心子查詢中的表操作符 
E081-01核心SELECT 權限 
E081-02核心DELETE 權限 
E081-03核心表級別的 INSERT 權限 
E081-04核心表級別的 UPDATE 權限 
E081-06核心表級別的 REFERENCES 權限 
E081-08核心WITH GRANT OPTION 
E091核心集合函數 
E091-01核心AVG 
E091-02核心COUNT 
E091-03核心MAX 
E091-04核心MIN 
E091-05核心SUM 
E091-06核心ALL 修飾詞 
E091-07核心DISTINCT 修飾詞 
E101核心基本數據操作 
E101-01核心INSERT 語句 
E101-03核心搜索的 UPDATE 語句 
E101-04核心搜索的 DELETE 語句 
E111核心單行 SELECT 語句 
E121-01核心DECLARE CURSOR 
E121-02核心ORDER BY 字段不必在選擇列表中 
E121-03核心ORDER BY 子句中的值表達式 
E121-08核心CLOSE 語句 
E121-10核心FETCH 語句隱含的 NEXT 
E131核心空值支持(null在數值場所) 
E141核心基本完整性約束 
E141-01核心NOT NULL 約束 
E141-02核心NOT NULL 字段的 UNIQUE 約束 
E141-03核心PRIMARY KEY 約束 
E141-04核心參考刪除動作和參考更新動作的帶著 NO ACTION 缺省的基本 FOREIGN KEY 約束 
E141-06核心CHECK 約束 
E141-07核心字段缺省 
E141-08核心PRIMARY KEY 上引申的 NOT NULL 
E141-10核心外鍵上的名字可以以任何順序聲明 
E151核心事務支持 
E151-01核心COMMIT 語句 
E151-02核心ROLLBACK 語句 
E152核心基本的 SET TRANSACTION 語句 
E152-01核心SET TRANSACTION 語句:ISOLATION LEVEL SERIALIZABLE 子句 
E152-02核心SET TRANSACTION 語句:READ ONLY and READ WRITE 子句 
E161核心使用前導的雙減號的 SQL 注釋 
F021核心基本信息模式 
F021-01核心COLUMNS 視圖 
F021-02核心TABLES 視圖 
F021-03核心VIEWS 視圖 
F021-04核心TABLE_CONSTRAINTS 視圖 
F021-05核心REFERENTIAL_CONSTRAINTS 視圖 
F021-06核心CHECK_CONSTRAINTS 視圖 
F031核心基本模式操作 
F031-01核心用于創建永久基本表的 CREATE TABLE 語句 
F031-02核心CREATE VIEW 語句 
F031-03核心GRANT 語句 
F031-04核心ALTER TABLE 語句:ADD COLUMN 子句 
F031-13核心DROP TABLE 語句:RESTRICT 子句 
F031-16核心DROP VIEW 語句:RESTRICT 子句 
F031-19核心REVOKE 語句:RESTRICT 子句 
F032 CASCADE 刪除行為 
F033 ALTER TABLE 語句:DROP COLUMN 子句 
F034 擴展的 REVOKE 語句 
F034-01 REVOKE 語句由模式對象所有者之外的用戶執行 
F034-02 REVOKE 語句:GRANT OPTION FOR 子句 
F034-03 撤銷一個有 WITH GRANT OPTION 權限的受讓人的權限的 REVOKE 語句 
F041核心基本表連接 
F041-01核心內連接(但是不一定是 INNER 鍵字) 
F041-02核心INNER 鍵字 
F041-03核心LEFT OUTER JOIN 
F041-04核心RIGHT OUTER JOIN 
F041-05核心可嵌套的外連接 
F041-07核心在左連接或者右連接裡的內層表也可以用于內連接 
F041-08核心支持所有比較操作符(而不僅僅是 = ) 
F051核心基本日期和時間 
F051-01核心DATE 數據類型(包括 DATE 文本支持) 
F051-02核心帶有小數秒部精度至少為 0 的 TIME 數據類型(包括 TIME 文本的支持) 
F051-03核心帶有至少 0 和 6 位小數精度的 TIMESTAMP 數據類型 (包括 TIMESTAME 文本的支持) 
F051-04核心在 DATE,TIME,和 TIMESTAMP 數據類型上的比較謂詞 
F051-05核心在日期時間類型和字符類型之間的明確 CAST 
F051-06核心CURRENT_DATE 
F051-07核心LOCALTIME 
F051-08核心LOCALTIMESTAMP 
F052增強日期時間設施時間間隔和日期時間算術 
F081核心視圖裡的 UNION 和 EXCEPT 
F111-02 READ COMMITTED 隔離級別 
F131核心分組的操作 
F131-01核心在帶有分組的視圖的查詢裡支持 WHERE,GROUP BY,和 HAVING 子句 
F131-02核心在帶有分組的視圖的查詢支持多個表 
F131-03核心在帶有分組的視圖的查詢裡支持集合函數 
F131-04核心帶有 GROUP BY 和 HAVING 子句和分組視圖的子查詢 
F131-05核心帶有 GROUP BY 和 HAVING 子句以及分組視圖的單行 SELECT 
F171 每用戶的多個模式 
F201核心CAST 函數 
F221核心明確的缺省 
F222 INSERT 語句:DEFAULT VALUES 子句 
F231 權限表 
F231-01 TABLE_PRIVILEGES 視圖 
F231-02 COLUMN_PRIVILEGES 視圖 
F231-03 USAGE_PRIVILEGES 視圖 
F251 域支持 
F261核心CASE 表達式 
F261-01核心簡單 CASE 
F261-02核心搜索的 CASE 
F261-03核心NULLIF 
F261-04核心COALESCE 
F271 混合字符文本 
F281 LIKE 增強 
F302OLAP 設施INTERSECT 表操作符 
F302-01OLAP 設施INTERSECT DISTINCT 表操作符 
F302-02OLAP 設施INTERSECT ALL 表操作符 
F304OLAP 設施EXCEPT ALL 表操作符 
F311-01核心CREATE SCHEMA 
F311-02核心用于永久表的 CREATE TABLE 
F311-03核心CREATE VIEW 
F311-05核心GRANT 語句 
F321 用戶認證 
F361 子程序支持 
F381 擴展的模式操作 
F381-01 ALTER TABLE 語句:ALTER COLUMN 子句 
F381-02 ALTER TABLE 語句:ADD CONSTRAINT 子句 
F381-03 ALTER TABLE 語句:DROP CONSTRAINT 子句 
F391 長標識符 
F401OLAP 設施擴展的表連接 
F401-01OLAP 設施NATURAL JOIN 
F401-02OLAP 設施FULL OUTER JOIN 
F401-03OLAP 設施UNION JOIN 
F401-04OLAP 設施CROSS JOIN 
F411增強日期時間設施時區聲明 
F421 國家字符 
F431-01 帶明確 FETCH 的 NEXT 
F431-04 FETCH PRIOR 
F431-06 FETCH RELATIVE 
F441 擴展的集合函數支持 
F471核心標量子查詢數值 
F481核心擴展的 NULL 謂詞 
F491增強完整性管理約束管理 
F501核心特性和兼容性視圖 
F501-01核心SQL_FEATURES 視圖 
F501-02核心SQL_SIZING 視圖 
F501-03核心SQL_LANGUAGES 視圖 
F502 增強的文檔表 
F502-01 SQL_SIZING_PROFILES 視圖 
F502-02 SQL_IMPLEMENTATION_INFO 視圖 
F502-03 SQL_PACKAGES 視圖 
F511 BIT 數據類型 
F531 臨時表 
F555增強日期時間設施增強的秒精度 
F561 全值表達式 
F571 真值測試 
F591OLAP 設施衍生表 
F611 指示器數據類型 
F651 表名字修飾詞 
F701增強完整性管理參考更新動作 
F711 ALTER 域 
F761 會話管理 
F771 連接管理 
F781 自引用的操作 
F791 不敏感的遊標 
F801 全部集合函數 
S071增強的對象支持函數中的 SQL 路徑以及類型名解析 
S111增強的對象支持查詢表達式中的 ONLY 
S211增強的對象支持, SQL/MM 支持用戶定義類型轉換函數 
T031 BOOLEAN 數據類型 
T141 SIMILAR 謂詞 
T151 DISTINCT 謂詞 
T191增強完整性管理參考動作 RESTRICT 
T201增強完整性管理用于參考完整性的可比較的數據類型 
T211-01增強完整性管理, 激活數據庫在一個基本表的 UPDATE,INSERT,或者 DELETE 上活躍的觸發器 
T211-02增強完整性管理, 激活數據庫BEFORE 觸發器 
T211-03增強完整性管理, 激活數據庫AFTER 觸發器 
T211-04增強完整性管理, 激活數據庫FOR EACH ROW 觸發器 
T211-07增強完整性管理, 激活數據庫TRIGGER 權限 
T212增強完整性管理增強的觸發器功能 
T231 SENSITIVE 遊標 
T241 START TRANSACTION 語句 
T312 OVERLAY 函數 
T321-01核心不重載的用戶定義函數 
T321-03核心函數調用 
T322PSM, SQL/MM 支持SQL 調用的函數以及過程的重載 
T323 外部過程的明確安全 
T351 SQL 中的塊注釋(/*...*/注釋) 
T441 ABS 和 MOD 函數 
T501 增強的 EXISTS 謂詞 
T551 缺省語法的可選鍵字 
T581 正則表達式子字串函數 
T591 可能的空字段的 UNIQUE 約束