Appendix D. SQL 相容性

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

本節試圖描述 PostgreSQL 在多大程度上遵循 SQL 標準。 下面的訊息不是相容性的全部內容,但是它提供了一個從用戶角度來看, 既合理又有用的足夠的細節訊息。

SQL 標準的正式名稱是 ISO/IEC 9705 "Database Language SQL"。 (譯註:沒有中文版。)標準的修改版會經常地發出;最近的一個版本是在 2003 年出現的。 那個版本被稱作 ISO/IEC 9075:2003,或者簡稱為 SQL:2003。這個版本之前的是 SQL:1999 和 SQL-92。 每個標準都代替了前面那個,所以聲稱兼容早期版本沒有什麼官方的好處。 PostgreSQL 的開發力圖瞄準兼容標準最新的正式版本,只要這樣的兼容不會和傳統的特性或者常識衝突。 在 SQL:2003 的準備過程中,PostgreSQL 項目在 ISO/IEC 9075 工作組裡面沒有代資料表。 即使如此,許多 SQL:2003 要求的特性都已經得到了支援,只是有些時候函數的語法略有不同。 更多有關標準兼容的特性將在未來的版本裡看到。

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

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

SQL:2003 標準也分裂成一系列部分: 每種都用一個縮寫來標識。請注意這些部分並非連續編號的。

PostgreSQL 涵蓋 1,2,和 11 部分。 部分 3 類似 ODBC 接口,部分 4 類似 PL/pgSQL 編程語言, 但是兩者都沒有經過嚴格的標準兼容檢查,也並未完全為了標準而製作。

PostgreSQL 支援大多數 SQL:2003 的主要特性。在總共 164 個強制性要求完全兼容的核心特性裡, PostgreSQL 遵循至少 150 個。另外,PostgreSQL 還支援一長串可選的特性。 值得一提的是,在我們寫這些的時候,沒有任何目前版本的資料庫管理系統聲稱支援全部核心 SQL:2003。

在隨後地兩節裡,我們提供了PostgreSQL 所支援的這些特性地一個列資料表。 後面跟著一個在 SQL:2003 裡定義了但是在 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 SERIALIZABLE 之外的隔離級別 
F111-01 READ UNCOMMITTED 隔離級別行為和 READ COMMITTED 類似
F111-02 READ COMMITTED 隔離級別 
F111-03 REPEATABLE READ 隔離級別行為和 SERIALIZABLE 類似
F131核心分組的操作 
F131-01核心在帶有分組的視圖的查詢裡支援 WHERE,GROUP BY,和 HAVING 子句 
F131-02核心在帶有分組的視圖的查詢支援多個資料表 
F131-03核心在帶有分組的視圖的查詢裡支援集合函數 
F131-04核心帶有 GROUP BY 和 HAVING 子句和分組視圖的子查詢 
F131-05核心帶有 GROUP BY 和 HAVING 子句以及分組視圖的單行 SELECT 
F171 每用戶的多個模式 
F191增強完整性管理參考刪除動作 
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 只讀的可滾動游標 
F431-01 帶明確 FETCH 的 NEXT 
F431-02 FETCH FIRST 
F431-03 FETCH LAST 
F431-04 FETCH PRIOR 
F431-05 FETCH ABSOLUTE 
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 謂詞 
T171 資料表定義裡的 LIKE 子句 
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 語句 
T271 保存點 
T312 OVERLAY 函數 
T321-01核心不重載的用戶定義函數 
T321-03核心函數調用 
T321-06核心ROUTINES 視圖 
T321-07核心PARAMETERS 視圖 
T322PSM, SQL/MM 支援SQL 調用的函數以及過程的重載 
T323 外部過程的明確安全 
T351 SQL 中的塊註釋(/*...*/註釋) 
T441 ABS 和 MOD 函數 
T501 增強的 EXISTS 謂詞 
T551 預設語法的可選鍵字 
T581 正則資料表達式子字串函數 
T591 可能的空字串的 UNIQUE 約束