Skip to content

附录 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”。标准的修订版会不时发布;最近一次更新出现在 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为符合性定义了三个功能集:入门级、中级和完全级。大多数声称符合SQL标准的数据库管理系统仅在入门级符合,因为中级和完全级中的所有功能集要么过于庞大,要么与旧行为相冲突。

从SQL:1999开始,SQL 标准定义了一大组单独的功能,而不是在SQL-92中发现的无效的三个广泛级别。这些功能的一个大子集代表了“核心”功能,每个符合 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 的大多数主要特性。在完全符合核心要求的 177 个强制特性中,PostgreSQL 至少符合 170 个。此外,还有一长串受支持的可选特性。值得注意的是,在撰写本文时,没有任何数据库管理系统的当前版本声称完全符合核心 SQL:2023。

在以下两个部分中,我们提供了PostgreSQL支持的特性列表,然后是SQL:2023中定义但PostgreSQL尚未支持的特性列表。这两个列表都是近似的:对于列为受支持的特性,可能存在不一致的次要详细信息,而对于不受支持的特性,其大部分实际上可能已实现。文档的主体始终包含有关什么有效和无效的最准确信息。

注意

包含连字符的特性代码是子特性。因此,如果某个特定子特性不受支持,则即使支持其他一些子特性,主特性也会被列为不受支持。