↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本。 PostgreSQL 7.3 已结束支持。 请参阅 当前版本手册.

附录 C. SQL 符合性

本节尝试概述 PostgreSQL 在多大程度上符合 SQL 标准。完全符合该标准或给出一份完整的符合性声明既复杂又没有特别的用处,因此本节只能给出一个概览。

SQL 标准的正式名称是 ISO/IEC 9075“数据库语言 SQL”。该标准不时发布修订版本;最近一次出现在 1999 年。那个版本称为 ISO/IEC 9075:1999,或非正式地称为 SQL99。在此之前的版本是 SQL92。PostgreSQL 的开发倾向于在不与传统特性或常识相矛盾的前提下,以符合该标准的最新官方版本为目标。在撰写本文时,该标准的一次新修订正在投票表决中,如果获得批准,它最终将成为未来 PostgreSQL 开发的符合性目标。

SQL92 为符合性定义了三个特性集:入门(Entry)、中级(Intermediate)和完整(Full)。多数宣称符合 SQL 标准的数据库产品,实际上只符合入门级别,因为中级和完整级别中的全部特性要么过于庞杂,要么与既有行为相冲突。

SQL99 定义了大量独立特性,而不是 SQL92 中那种效果不佳且过于宽泛的三级分类。其中很大一个子集构成了“核心”特性,也就是每个符合标准的 SQL 实现都必须提供的特性。其余的特性则完全是可选的。某些可选特性被组合在一起,形成“包”,SQL 实现可以声明符合这些包,从而表明符合特定的特性组。

SQL99 标准也分为 5 个部分:框架(Framework)、基础(Foundation)、调用级接口(Call Level Interface)、持久存储模块(Persistent Stored Modules)和宿主语言绑定(Host Language Bindings)。PostgreSQL 只涵盖第 1、2、5 部分。第 3 部分类似于 ODBC 接口,第 4 部分类似于 PL/pgSQL 编程语言,但这两种情况下都没有特别意图实现精确的符合。

在下面两节中,我们先列出 PostgreSQL 支持的特性,然后列出 SQL99 中定义但 PostgreSQL 尚不支持的特性。这两个列表都是近似的:被列为受支持的特性可能存在个别不符合标准的细节,而不受支持的特性也可能实际上已实现了很大一部分。关于什么可用什么不可用的最准确信息,始终以文档正文为准。

注意

特性代码中包含连字符的是子特性。因此,如果某个特定的子特性不受支持,那么即使其他一些子特性受支持,该主特性也会被列为不受支持。

C.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 函数 
E011-12核心字符比较 
E031核心标识符 
E031-01核心分隔标识符 
E031-02核心小写标识符 
E031-03核心尾部下划线 
E051核心基本查询说明 
E051-01核心SELECT DISTINCT 
E051-02核心GROUP BY 子句 
E051-04核心GROUP BY 可包含不在 <select list> 中的列 
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 权限 
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核心空值支持(以空值代替值) 
E141核心基本完整性约束 
E141-01核心NOT NULL 约束 
E141-02核心NOT NULL 列的 UNIQUE 约束 
E141-03核心PRIMARY KEY 约束 
E141-04核心基本 FOREIGN KEY 约束,其引用删除动作和引用更新动作均默认为 NO ACTION 
E141-06核心CHECK 约束 
E141-07核心列默认值 
E141-08核心主键上隐含的 NOT NULL 
E141-10核心外键中的名称可以以任意顺序指定 
E151核心事务支持 
E151-01核心COMMIT 语句 
E151-02核心ROLLBACK 语句 
E152-01核心SET TRANSACTION 语句:ISOLATION LEVEL SERIALIZABLE 子句 
E161核心使用前导双减号的 SQL 注释 
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 子句 
F032 CASCADE 删除行为 
F033 ALTER TABLE 语句:DROP COLUMN 子句 
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核心TIME 数据类型(包括对 TIME 字面量的支持),小数秒精度至少为 0 
F051-03核心TIMESTAMP 数据类型(包括对 TIMESTAMP 字面量的支持),小数秒精度至少为 0 和 6 
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 每用户多个模式 
F191增强的完整性管理引用删除动作 
F201核心CAST 函数 
F221核心显式默认值 
F222 INSERT 语句:DEFAULT VALUES 子句 
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核心模式定义语句 
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-01 带显式 NEXT 的 FETCH 
F431-04 FETCH PRIOR 
F431-06 FETCH RELATIVE 
F441 扩展集函数支持 
F471核心标量子查询值 
F481核心扩展 NULL 谓词 
F491增强的完整性管理约束管理 
F511 BIT 数据类型 
F531 临时表 
F555增强的日期时间设施增强的秒精度 
F561 完整值表达式 
F571 真值测试 
F591OLAP 设施派生表 
F611 指示符数据类型 
F651 目录名称限定符 
F701增强的完整性管理引用更新动作 
F761 会话管理 
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 权限 
T231 敏感游标 
T241 START TRANSACTION 语句 
T312 OVERLAY 函数 
T321-01核心无重载的用户定义函数 
T321-03核心函数调用 
T322PSM、SQL/MM 支持SQL 调用的函数和过程的重载 
T323 外部例程的显式安全性 
T351 括起的 SQL 注释(/*...*/ 注释) 
T441 ABS 和 MOD 函数 
T501 增强的 EXISTS 谓词 
T551 默认语法的可选关键字 
T581 正则表达式子串函数 
T591 可为空列的 UNIQUE 约束 

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.