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

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 11 已结束支持。 2023-11-09. 请参阅 当前版本手册.

附录 D. SQL 符合性

本节尝试概述 PostgreSQL 在多大程度上符合当前的 SQL 标准。下文并不是一份完整的符合性声明,但会在合理且对用户有用的范围内,尽可能详细地介绍主要主题。

SQL 标准的正式名称是 ISO/IEC 9075 “Database Language SQL”。该标准会不时发布修订版,最近一次更新出现在 2011 年。2011 年版称为 ISO/IEC 9075:2011,也简称 SQL:2011。此前的版本依次为 SQL:2008、SQL:2006、SQL:2003、SQL:1999 和 SQL-92。每个版本都会取代前一版本,因此宣称符合更早版本并无官方意义。PostgreSQL 的开发目标是在不违背传统特性或常识的前提下,尽可能符合标准的最新正式版本。SQL 标准要求的许多特性都得到了支持,虽然有时语法或功能会略有不同。随着时间推移,仍可期待它在符合性方面继续推进。

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

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

从 SQL:2003 开始的各版标准还被拆分为若干部分,每一部分都有一个简称。请注意,这些部分的编号并不是连续的。

  • ISO/IEC 9075-1 框架(SQL/Framework)

  • ISO/IEC 9075-2 基础(SQL/Foundation)

  • ISO/IEC 9075-3 调用级接口(SQL/CLI)

  • ISO/IEC 9075-4 持久化存储模块(SQL/PSM)

  • ISO/IEC 9075-9 外部数据管理(SQL/MED)

  • ISO/IEC 9075-10 对象语言绑定(SQL/OLB)

  • ISO/IEC 9075-11 信息与定义模式(SQL/Schemata)

  • ISO/IEC 9075-13 使用 Java 语言的例程和类型(SQL/JRT)

  • ISO/IEC 9075-14 XML 相关规范(SQL/XML)

PostgreSQL 核心部分涵盖第 1、2、9、11 和 14 部分。第 3 部分由 ODBC 驱动实现,第 13 部分由 PL/Java 插件实现,但目前尚未核验这些组件的确切符合性。PostgreSQL 目前还没有第 4 和 10 部分的实现。

PostgreSQL 支持 SQL:2011 的大多数主要特性。在达到完整“Core”符合性所要求的 179 个强制特性中,PostgreSQL 至少符合其中 160 个。此外,还有一长串已支持的可选特性。值得一提的是,在写作本文时,还没有任何数据库管理系统的现行版本宣称完全符合 SQL:2011 的核心要求。

接下来的两节先列出 PostgreSQL 已支持的特性,再列出 SQL:2011 中定义但 PostgreSQL 尚未支持的特性。这两个列表都只是近似描述:某个被列为已支持的特性,可能仍有少量细节并不完全符合标准;反之,一个被列为不支持的特性,其很大一部分实际上也可能已经实现。关于哪些内容可用、哪些内容不可用,文档正文始终是最准确的信息来源。

注意

带连字符的特性代码表示子特性。因此,如果某个特定子特性不受支持,则即使该主特性的其他子特性受支持,该主特性也会被列为不受支持。

D.1. 支持的特性 #

标识符包描述注释
B012 嵌入式 C 
B021 直接 SQL 
E011核心数值数据类型 
E011-01核心INTEGER 和 SMALLINT 数据类型 
E011-02核心REAL、DOUBLE PRECISION 和 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 函数计数前去掉 CHARACTER 值的尾随空格
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 可以包含不在 <select list> 中的列 
E051-05核心选择列表项可以重命名 
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核心基本权限 
E081-01核心SELECT 权限 
E081-02核心DELETE 权限 
E081-03核心表级 INSERT 权限 
E081-04核心表级 UPDATE 权限 
E081-05核心列级 UPDATE 权限 
E081-06核心表级 REFERENCES 权限 
E081-07核心列级 REFERENCES 权限 
E081-08核心WITH GRANT OPTION 
E081-09核心USAGE 权限 
E081-10核心EXECUTE 权限 
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核心基本游标支持 
E121-01核心DECLARE CURSOR 
E121-02核心ORDER BY 列不必出现在选择列表中 
E121-03核心ORDER BY 子句中的值表达式 
E121-04核心OPEN 语句 
E121-06核心定位式 UPDATE 语句 
E121-07核心定位式 DELETE 语句 
E121-08核心CLOSE 语句 
E121-10核心FETCH 语句隐含 NEXT 
E121-17核心WITH HOLD 游标 
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核心由 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 和 READ WRITE 子句 
E153核心带子查询的可更新查询 
E161核心以双减号开头的 SQL 注释 
E171核心SQLSTATE 支持 
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 使用 REVOKE 语句撤销被授权者以 WITH GRANT OPTION 获得的权限 
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增强的日期时间功能时间间隔与日期时间运算 
F053 OVERLAPS 谓词 
F081核心视图中的 UNION 和 EXCEPT 
F111 SERIALIZABLE 以外的隔离级别 
F111-01 READ UNCOMMITTED 隔离级别 
F111-02 READ COMMITTED 隔离级别 
F111-03 REPEATABLE READ 隔离级别 
F131核心分组操作 
F131-01核心涉及分组视图的查询支持 WHERE、GROUP BY 和 HAVING 子句 
F131-02核心涉及分组视图的查询支持多个表 
F131-03核心涉及分组视图的查询支持集合函数 
F131-04核心带 GROUP BY、HAVING 子句和分组视图的子查询 
F131-05核心带 GROUP BY、HAVING 子句和分组视图的单行 SELECT 
F171 每个用户可有多个模式 
F191增强的完整性管理引用删除动作 
F200 TRUNCATE TABLE 语句 
F201核心CAST 函数 
F202 TRUNCATE TABLE:标识列重启选项 
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 
F262 扩展 CASE 表达式 
F271 复合字符字面量 
F281 LIKE 增强 
F302 INTERSECT 表操作符 
F302-01 INTERSECT DISTINCT 表操作符 
F302-02 INTERSECT ALL 表操作符 
F304 EXCEPT ALL 表操作符 
F311-01核心CREATE SCHEMA 
F311-02核心用于持久基表的 CREATE TABLE 
F311-03核心CREATE VIEW 
F311-04核心CREATE VIEW:WITH CHECK OPTION 
F311-05核心GRANT 语句 
F321 用户授权 
F361 子程序支持 
F381 扩展模式操纵 
F381-01 ALTER TABLE 语句:ALTER COLUMN 子句 
F381-02 ALTER TABLE 语句:ADD CONSTRAINT 子句 
F381-03 ALTER TABLE 语句:DROP CONSTRAINT 子句 
F382 更改列的数据类型 
F383 设置列非空子句 
F384 删除标识属性子句 
F386 设置标识列生成方式子句 
F391 长标识符 
F392 标识符中的 Unicode 转义 
F393 字面量中的 Unicode 转义 
F401 扩展连接表 
F401-01 NATURAL JOIN 
F401-02 FULL OUTER JOIN 
F401-04 CROSS JOIN 
F402 LOB、数组和多重集的命名列连接 
F411增强的日期时间功能时区规范字面量解释方面存在差异
F421 国家字符 
F431 只读可滚动游标 
F431-01 带显式 NEXT 的 FETCH 
F431-02 FETCH FIRST 
F431-03 FETCH LAST 
F431-04 FETCH PRIOR 
F431-05 FETCH ABSOLUTE 
F431-06 FETCH RELATIVE 
F441 扩展集合函数支持 
F442 集合函数中的混合列引用 
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 视图 
F531 临时表 
F555增强的日期时间功能增强的秒精度 
F561 完整的值表达式 
F571 真值测试 
F591 派生表 
F611 指示符数据类型 
F641 行构造器和表构造器 
F651 目录名称限定符 
F661 简单表 
F672 回溯检查约束 
F690 排序规则支持但不支持字符集
F692 扩展排序规则支持 
F701增强的完整性管理引用更新动作 
F711 ALTER DOMAIN 
F731 INSERT 列权限 
F751 视图 CHECK 增强 
F761 会话管理 
F762 CURRENT_CATALOG 
F763 CURRENT_SCHEMA 
F771 连接管理 
F781 自引用操作 
F791 不敏感游标 
F801 完整集合函数 
F850 <query expression> 中顶层的 <order by clause> 
F851 子查询中的 <order by clause> 
F852 视图中顶层的 <order by clause> 
F855 <query expression> 中嵌套的 <order by clause> 
F856 <query expression> 中嵌套的 <fetch first clause> 
F857 <query expression> 中顶层的 <fetch first clause> 
F858 子查询中的 <fetch first clause> 
F859 视图中顶层的 <fetch first clause> 
F860 <fetch first clause> 中的 <fetch first row count> 
F861 <query expression> 中顶层的 <result offset clause> 
F862 子查询中的 <result offset clause> 
F863 <query expression> 中嵌套的 <result offset clause> 
F864 视图中顶层的 <result offset clause> 
F865 <result offset clause> 中的 <offset row count> 
S071增强的对象支持函数名和类型名解析中的 SQL 路径 
S092 用户定义类型的数组 
S095 通过查询构造数组 
S096 可选数组边界 
S098 ARRAY_AGG 
S111增强的对象支持查询表达式中的 ONLY 
S201 用于数组的 SQL 调用例程 
S201-01 数组参数 
S201-02 数组作为函数结果类型 
S211增强的对象支持用户定义的类型转换函数 
S301 增强的 UNNEST 
T031 BOOLEAN 数据类型 
T071 BIGINT 数据类型 
T121 查询表达式中的 WITH(不含 RECURSIVE) 
T122 子查询中的 WITH(不含 RECURSIVE) 
T131 递归查询 
T132 子查询中的递归查询 
T141 SIMILAR 谓词 
T151 DISTINCT 谓词 
T152 带否定的 DISTINCT 谓词 
T171 表定义中的 LIKE 子句 
T172 表定义中的 AS 子查询子句 
T173 表定义中的扩展 LIKE 子句 
T174 标识列 
T177 sequence 生成器支持:简单重启选项 
T178 标识列:简单重启选项 
T191增强的完整性管理引用动作 RESTRICT 
T201增强的完整性管理引用约束的可比较数据类型 
T211-01主动数据库,增强的完整性管理由对一个基表的 UPDATE、INSERT 或 DELETE 激活的触发器 
T211-02主动数据库,增强的完整性管理BEFORE 触发器 
T211-03主动数据库,增强的完整性管理AFTER 触发器 
T211-04主动数据库,增强的完整性管理FOR EACH ROW 触发器 
T211-05主动数据库,增强的完整性管理可以指定调用触发器前必须为真的搜索条件 
T211-07主动数据库,增强的完整性管理TRIGGER 权限 
T212增强的完整性管理增强的触发器能力 
T213 INSTEAD OF 触发器 
T231 敏感游标 
T241 START TRANSACTION 语句 
T271 保存点 
T281 列粒度的 SELECT 权限 
T285 增强的派生列名称 
T312 OVERLAY 函数 
T321-01核心不带重载的用户定义函数 
T321-02核心不带重载的用户定义存储过程 
T321-03核心函数调用 
T321-04核心CALL 语句 
T321-06核心ROUTINES 视图 
T321-07核心PARAMETERS 视图 
T323 外部例程的显式安全性 
T325 带限定的 SQL 参数引用 
T331 基本角色 
T341 SQL 调用函数和过程的重载 
T351 括号式 SQL 注释(/*...*/ 注释) 
T431OLAP扩展分组能力 
T432 嵌套和串接的 GROUPING SETS 
T433 多参数 GROUPING 函数 
T441 ABS 和 MOD 函数 
T461 对称 BETWEEN 谓词 
T491 LATERAL 派生表 
T501 增强的 EXISTS 谓词 
T521 CALL 语句中的命名实参 
T551 默认语法的可选关键字 
T581 正则表达式子串函数 
T591 允许空值的列上的 UNIQUE 约束 
T611OLAP基本 OLAP 操作 
T613 采样 
T614 NTILE 函数 
T615 LEAD 和 LAG 函数 
T617 FIRST_VALUE 和 LAST_VALUE 函数 
T620 WINDOW 子句:GROUPS 选项 
T621 增强的数值函数 
T631核心只有一个列表元素的 IN 谓词 
T651 SQL 例程中的 SQL 模式语句 
T655 循环依赖的例程 
X010 XML 类型 
X011 XML 类型的数组 
X014 XML 类型的属性 
X016 持久 XML 值 
X020 XMLConcat 
X031 XMLElement 
X032 XMLForest 
X034 XMLAgg 
X035 XMLAgg:ORDER BY 选项 
X036 XMLComment 
X037 XMLPI 
X040 基本表映射 
X041 基本表映射:省略空值 
X042 基本表映射:空值表示为 nil 
X043 基本表映射:表表示为森林 
X044 基本表映射:表表示为元素 
X045 基本表映射:带目标命名空间 
X046 基本表映射:数据映射 
X047 基本表映射:元数据映射 
X048 基本表映射:二进制串的 base64 编码 
X049 基本表映射:二进制串的十六进制编码 
X050 高级表映射 
X051 高级表映射:省略空值 
X052 高级表映射:空值表示为 nil 
X053 高级表映射:表表示为森林 
X054 高级表映射:表表示为元素 
X055 高级表映射:带目标命名空间 
X056 高级表映射:数据映射 
X057 高级表映射:元数据映射 
X058 高级表映射:二进制串的 base64 编码 
X059 高级表映射:二进制串的十六进制编码 
X060 XMLParse:字符串输入和 CONTENT 选项 
X061 XMLParse:字符串输入和 DOCUMENT 选项 
X070 XMLSerialize:字符串序列化和 CONTENT 选项 
X071 XMLSerialize:字符串序列化和 DOCUMENT 选项 
X072 XMLSerialize:字符串序列化 
X090 XML 文档谓词 
X120 SQL 例程中的 XML 参数 
X121 外部例程中的 XML 参数 
X222 XML 传递机制 BY REF 
X301 XMLTable:派生列列表选项 
X302 XMLTable:序号列选项 
X303 XMLTable:列默认值选项 
X304 XMLTable:传递上下文项必须是 XML DOCUMENT
X400 名称和标识符映射 
X410 更改列的数据类型:XML 类型 

报告文档问题

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