受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

Appendix D. SQL 符合性

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

SQL 标准的正式名称是 ISO/IEC 9075 Database Language SQL。该标准会不时发布修订版,最近一次更新出现在 2023 年。 2023 年版称为 ISO/IEC 9075:2023,也简称 SQL:2023。 此前的版本依次为 SQL:2016、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 标准的实现都必须提供的特性。 其余特性则完全是可选的。

该标准分为若干部分,每一部分也有一个简称:

  • 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)

  • ISO/IEC 9075-15 多维数组(SQL/MDA)

  • ISO/IEC 9075-16 属性图查询(SQL/PGQ)

请注意,有些部分编号并未使用,或者已不再使用。

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

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

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

Note

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

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。