本節視圖描述 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 裡還不支援的特性清單。 這兩個清單都是近似的:可能在列出為兼容的特性裡有一點點小的細節上的區別, 而很大部分的不支援的特性可能實際上已經實現了。文件的主體總會是包含 有關哪些能用,哪些不能用的最準確的資訊。
注意: 包含一個連字元的特性代碼表示一個幾特性。因此, 如果不支援特定的幾特性,那麼主特性也會列在不支援的特性, 即使我們支援其它的幾特性也如此。
| 標識符 | 包 | 描述 | 注解 |
|---|---|---|---|
| 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 增強 | ||
| F302 | OLAP 設施 | INTERSECT 表運算子 | |
| F302-01 | OLAP 設施 | INTERSECT DISTINCT 表運算子 | |
| F302-02 | OLAP 設施 | INTERSECT ALL 表運算子 | |
| F304 | OLAP 設施 | 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 | 長標識符 | ||
| F401 | OLAP 設施 | 擴展的表連線 | |
| F401-01 | OLAP 設施 | NATURAL JOIN | |
| F401-02 | OLAP 設施 | FULL OUTER JOIN | |
| F401-03 | OLAP 設施 | UNION JOIN | |
| F401-04 | OLAP 設施 | 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 | 真值測試 | ||
| F591 | OLAP 設施 | 衍生表 | |
| 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 | 核心 | 函數調用 | |
| T322 | PSM, SQL/MM 支援 | SQL 調用的函數以及過程的重載 | |
| T323 | 外部過程的明確安全 | ||
| T351 | SQL 中的塊註釋(/*...*/註釋) | ||
| T441 | ABS 和 MOD 函數 | ||
| T501 | 增強的 EXISTS 謂詞 | ||
| T551 | 預設語法的可選鍵字 | ||
| T581 | 正則表達式幾字串函數 | ||
| T591 | 可能的空欄位的 UNIQUE 約束 |