Appendix D. SQL兼容性

Table of Contents

  • D.1. 支持的特性
  • D.2. 不支持的特性

本节试图描述PostgreSQL在多大程度上遵循SQL标准。 下面的信息不是兼容性的全部内容, 但是它提供了一个从用户角度来看, 既合理又有用的足够的细节信息。

SQL标准的正式名称是ISO/IEC 9075 "Database Language SQL"。 标准的修改版会经常地发布; 最近更新的一个版本出现在2011年。 那个版本被称作ISO/IEC 9075:2011, 或者简称SQL:2011。 这个版本之前的是SQL:2008, SQL:2003, SQL:1999和SQL-92。 每个版本都替代前面那个, 所以声称兼容早期版本没有什么官方的好处。 PostgreSQL开发瞄准兼容标准最新官方版本, 只要这样的兼容不会与传统的特性或者常识冲突。 许多SQL标准要求的特性都得到了支持, 只是有些时候语法或者函数略微不同。 更多有关标准兼容的特性将在未来的版本里看到。

SQL-92为兼容性定义了三种特性集合: Entry, Intermediate和Full。大部分数据库管理系统声明在Entry 级别遵循SQL标准兼容性, 因为中等和完全的特性要么是太庞大, 要么就是和传统的行为相冲突。

从SQL:1999开始,SQL标准定义了一个很大的独立特性集合, 而不是SQL-92那样宽泛而又低效率的三个级别。 这些特性中的一个很大的子集形成"核心"特性, 它们是每种兼容SQL的实现必须提供的特性。 其它的特性都是可选的。有些可选的特性组合在一起形成"包", SQL的实现可以号称遵循这些包, 也就是声称遵循特定的特性组。

SQL:2003标准也分裂成一系列部分: 每种都用一个缩写来标识。请注意这些部分并非连续编号的。

  • ISO/IEC 9075-1 Framework (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)

PostgreSQL涵盖1,2,9,11和14。3被ODBC驱动覆盖, 13被PL/Java插件覆盖。但是这些组件目前没有严格的兼容检查。 目前没有实现PostgreSQL的第4和10部分。

PostgreSQL支持大多数SQL:2011的主要特性。 在总共179个强制要求完全兼容的核心特性里, PostgreSQL遵循至少160个。另外, PostgreSQL还支持一长串可选的特性。 值得一提的是,在写这些的时候, 没有任何当前版本的数据库管理系统声称支持全部核心SQL:2011。

下面的两节列出了PostgreSQL支持的特性, 以及PostgreSQL目前尚不支持的SQL:2011特性。 这两个列表都是近似的: 被列为支持的特性可能在某些次要细节方面与标准不一致, 被列为不支持的特性也可能实际上已经被实现。 文档的主体部分包含了大多数能否正常工作的精确信息。

Note: 包含一个连字符的特性代码表示一个子特性。 因此,如果不支持特定的子特性, 那么主特性也会列在不支持的特性, 即使支持其它的子特性也如此。