pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
本节尝试概述 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 尚不支持的 特性。这两个列表都是近似的:被列为受支持的特性可能存在个别不符合标准的细节, 而不受支持的特性也可能实际上已实现了很大一部分。关于什么可用什么不可用的 最准确信息,始终以文档正文为准。
特性代码中包含连字符的是子特性。因此,如果某个特定的子特性不受支持, 那么即使其他一些子特性受支持,该主特性也会被列为不受支持。
| 标识符 | 包 | 描述 | 注释 |
|---|---|---|---|
| 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 增强 | ||
| F302 | OLAP 设施 | INTERSECT 表操作符 | |
| F302-01 | OLAP 设施 | INTERSECT DISTINCT 表操作符 | |
| F302-02 | OLAP 设施 | INTERSECT ALL 表操作符 | |
| F304 | OLAP 设施 | 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 | 长标识符 | ||
| 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 | 带显式 NEXT 的 FETCH | ||
| F431-04 | FETCH PRIOR | ||
| F431-06 | FETCH RELATIVE | ||
| F441 | 扩展集函数支持 | ||
| F471 | 核心 | 标量子查询值 | |
| F481 | 核心 | 扩展 NULL 谓词 | |
| F491 | 增强的完整性管理 | 约束管理 | |
| F511 | BIT 数据类型 | ||
| F531 | 临时表 | ||
| F555 | 增强的日期时间设施 | 增强的秒精度 | |
| F561 | 完整值表达式 | ||
| F571 | 真值测试 | ||
| F591 | OLAP 设施 | 派生表 | |
| 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 | 核心 | 函数调用 | |
| T322 | PSM、SQL/MM 支持 | SQL 调用的函数和过程的重载 | |
| T323 | 外部例程的显式安全性 | ||
| T351 | 括起的 SQL 注释(/*...*/ 注释) | ||
| T441 | ABS 和 MOD 函数 | ||
| T501 | 增强的 EXISTS 谓词 | ||
| T551 | 默认语法的可选关键字 | ||
| T581 | 正则表达式子串函数 | ||
| T591 | 可为空列的 UNIQUE 约束 |
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。