本节试图描述 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 标准也分裂成一系列部分: 每种都用一个缩写来标识。请注意这些部分并非连续编号的。
ISO/IEC 9075-1 Framework/架构 (SQL/Framework)
ISO/IEC 9075-2 Foundation/基础 (SQL/Foundation)
ISO/IEC 9075-3 Call Level Interface/调用接口 (SQL/CLI)
ISO/IEC 9075-4 Persistent Stored Modules/永久存储模块 (SQL/PSM)
ISO/IEC 9075-9 Management of External Data/外部数据管理 (SQL/MED)
ISO/IEC 9075-10 Object Language Bindings/对象语言绑定 (SQL/OLB)
ISO/IEC 9075-11 Information and Definition Schemas/信息及定义模式 (SQL/Schemata)
ISO/IEC 9075-13 Routines and Types using the Java Language/java语言的过程和类型 (SQL/JRT)
ISO/IEC 9075-14 XML-related specifications/XML 相关的规范 (SQL/XML)
PostgreSQL 涵盖 1,2,和 11 部分。 部分 3 类似 ODBC 接口,部分 4 类似 PL/pgSQL 编程语言, 但是两者都没有经过严格的标准兼容检查,也并未完全为了标准而制作。
PostgreSQL 支持大多数 SQL:2003 的主要特性。在总共 164 个强制性要求完全兼容的核心特性里, PostgreSQL 遵循至少 150 个。另外,PostgreSQL 还支持一长串可选的特性。 值得一提的是,在我们写这些的时候,没有任何当前版本的数据库管理系统声称支持全部核心 SQL:2003。
在随后地两节里,我们提供了PostgreSQL 所支持的这些特性地一个列表。 后面跟着一个在 SQL:2003 里定义了但是在 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 | 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 增强 | ||
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 | 只读的可滚动游标 | ||
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 | 真值测试 | ||
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 谓词 | ||
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 视图 | |
T322 | PSM, SQL/MM 支持 | SQL 调用的函数以及过程的重载 | |
T323 | 外部过程的明确安全 | ||
T351 | SQL 中的块注释(/*...*/注释) | ||
T441 | ABS 和 MOD 函数 | ||
T501 | 增强的 EXISTS 谓词 | ||
T551 | 缺省语法的可选键字 | ||
T581 | 正则表达式子字串函数 | ||
T591 | 可能的空字段的 UNIQUE 约束 |