附录 D. SQL 符合性
这一节尝试勾勒出PostgreSQL与当前 SQL 标准相符合的范围。下面的信息并不是符合性的完整说明,但是它尽可能详细地表达了对用户合理且有用的主要主题。
SQL 标准的正式名称是 ISO/IEC 9075 "数据库语言 SQL"。该标准会不时地发布一个修改的版本,最近一次更新出现在 2011 年。2011 年的版本被称为 ISO/IEC 9075:2011,或者简单地为 SQL:2011。之前的版本是 SQL:2008、SQL:2003、SQL:1999 和 SQL-92。每一个版本会替换之前的一个版本,因此声称与早前的版本相符合没有意义。PostgreSQL的开发希望与该标准的最新官方版本相符,并且这种符合不会与额外特性或尝试相冲突。很多 SQL 标准所要求的特性都被支持,不过有时在语法或函数上有所不同。随着时间的推移,符合性会得到进一步的提高。
SQL-92为符合性定义了三个特性集:入口、中间和完整。大部分号称SQL标准符合的数据库管理系统只是在入口级别上的符合,因为中间和完整级别的整个特性集合要么太多要么与遗留行为冲突。
从SQL:1999开始,SQL 标准定义了一个大型的个体特性集合,而没有无用地拓宽SQL-92中的三个级别。这些特性中的一个大型子集代表"核心"特性,每一个符合 SQL 的实现都必须提供。剩下的特性纯粹是可选的。一些可选的特性被分组到一起形成"包",SQL 实现可以声称符合它们,因此符合特定的特性组。
从SQL:2003开始的标准版本也被划分成数个部分。每一个部分有一个速记名。注意这些部分不是连续编号。
-
ISO/IEC 9075-1 Framework (SQL/Framework)
-
ISO/IEC 9075-2 Foundation (SQL/Foundation)
-
ISO/IEC 9075-3 Call Level Interface (SQL/CLI)
-
ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM)
-
ISO/IEC 9075-9 Management of External Data (SQL/MED)
-
ISO/IEC 9075-10 Object Language Bindings (SQL/OLB)
-
ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata)
-
ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT)
-
ISO/IEC 9075-14 XML-related specifications (SQL/XML)
PostgreSQL核心覆盖了部分 1、2、9、11 和 14。部分 3 被 ODBC 驱动所覆盖,并且部分 13 被 PL/Java 插件所覆盖,但是目前准确的符合性还没有在这些组件上被验证。目前对于PostgreSQL没有部分 4 和 10 的实现。
PostgreSQL 支持 SQL:2011 的大部分主要特性。在 179 个完整核心符合所要求的强制特性中,PostgreSQL 至少符合 160 个。另外,还有一个受支持的可选特性的长长的列表。值得注意的是,在编写此文档时,还没有任何数据库管理系统的当前版本声称完全符合核心的 SQL:2011。
在下面的两节中,我们提供了一个PostgreSQL所支持特性的列表,以及一个在SQL:2011中定义却还未被PostgreSQL支持的特性的列表。这两个列表都是大概的:对于被列为支持的一个特性可能会有少量的细节不符合,而且大部分未被支持的特性可能事实上已经被实现。本文档的主体部分包含了哪些能用哪些不能用的准确信息。
注意: 包含一个连字符的特性编码是子特性。因此,如果一个特定的子特性没有被支持,其主特性被列为未支持,即使其他的子特性都已被支持。