Appendix C. SQL 兼容性

Table of Contents
C.1. 支援的特性
C.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 裡還不支援的特性清單。 這兩個清單都是近似的:可能在列出為兼容的特性裡有一點點小的細節上的區別, 而很大部分的不支援的特性可能實際上已經實現了。文件的主體總會是包含 有關哪些能用,哪些不能用的最準確的資訊。

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

C.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 約束