Table of Contents
本节尝试概述 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 为符合性定义了三个特性集合:入门(Entry)、中级(Intermediate)与完全(Full)。声称符合 SQL 标准的大多数数据库管理系统只达到入门级符合,因为中级与完全级的全部特性要么过于庞大,要么与传统行为冲突。
从 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 尚不支持特性的列表。这两份列表都是近似的:被列为受支持的特性可能存在不符合标准的次要细节,而不受支持的特性其实也可能已实现大部分。文档正文始终包含关于哪些功能可用、哪些不可用的最准确信息。
包含连字符的特性编号是子特性。因此,如果某个特定子特性不受支持,即使其他子特性受支持,主特性也会被列为不受支持。