本节视图描述 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 约束 |