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 约束