附录 D. SQL 符合性

目录

D.1. 已支持特性
D.2. 未支持特性
D.3. XML对于SQL的限制和符合性/XML
D.3.1. 查询只限于XPath 1.0
D.3.2. 实现中的偶然限制

这一节尝试勾勒出PostgreSQL与当前 SQL 标准相符合的范围。下面的信息并不是符合性的完整说明,但是它尽可能详细地表达了对用户合理且有用的主要主题。

SQL 标准的正式名称是 ISO/IEC 9075 数据库语言 SQL。该标准会不时地发布一个修改的版本,最近一次更新出现在 2016 年。2016年的版本被称为 ISO/IEC 9075:2016,或者简单地为 SQL:2016。之前的版本是 SQL:2011,SQL:2008,SQL:2006,SQL:2003,SQL:1999 和 SQL-92。每一个版本会替换之前的一个版本,因此声称与早前的版本相符合没有意义。PostgreSQL的开发希望与该标准的最新官方版本相符,并且这种符合不会与额外特性或尝试相冲突。很多 SQL 标准所要求的特性都被支持,不过有时在语法或函数上有所不同。随着时间的推移,符合性会得到进一步的提高。

SQL-92为符合性定义了三个特性集:入口、中间和完整。大部分号称SQL标准符合的数据库管理系统只是在入口级别上的符合,因为中间和完整级别的整个特性集合要么太多要么与遗留行为冲突。

SQL:1999开始,SQL 标准定义了一个大型的个体特性集合,而没有无用地拓宽SQL-92中的三个级别。这些特性中的一个大型子集代表核心特性,每一个符合 SQL 的实现都必须提供。剩下的特性纯粹是可选的。一些可选的特性被分组到一起形成,SQL 实现可以声称符合它们,因此符合特定的特性组。

SQL:2003开始的标准版本也被划分成数个部分。每一个部分有一个速记名。注意这些部分不是连续编号。

PostgreSQL核心覆盖了部分 1、2、9、11 和 14。部分 3 被 ODBC 驱动所覆盖,并且部分 13 被 PL/Java 插件所覆盖,但是目前准确的符合性还没有在这些组件上被验证。目前对于PostgreSQL没有部分 4 和 10 的实现。

PostgreSQL 支持 SQL:2016 的大部分主要特性。在 179 个完整核心符合所要求的强制特性中,PostgreSQL 至少符合 160 个。另外,还有一个受支持的可选特性的长长的列表。值得注意的是,在编写此文档时,还没有任何数据库管理系统的当前版本声称完全符合核心的 SQL:2016。

在下面的两节中,我们提供了一个PostgreSQL所支持特性的列表,以及一个在SQL:2016中定义却还未被PostgreSQL支持的特性的列表。这两个列表都是大概的:对于被列为支持的一个特性可能会有少量的细节不符合,而且大部分未被支持的特性可能事实上已经被实现。本文档的主体部分包含了哪些能用哪些不能用的准确信息。

注意

包含一个连字符的特性编码是子特性。因此,如果一个特定的子特性没有被支持,其主特性被列为未支持,即使其他的子特性都已被支持。