目次
本節では、PostgreSQLがどの程度現在の標準SQLに準拠しているかについて、概要を説明します。 以下の情報は互換性についての完全な説明ではありません。 しかし、ユーザにとって十分適切かつ有用な詳細を主な話題としてここで示しています。
標準SQLの公式な名称は、ISO/IEC 9075 「Database Language SQL」です。 この標準SQLの改訂バージョンは不定期にリリースされています。 最も最近の改訂は2016年に行われました。 この2016年版はISO/IEC 9075:2016、もしくは単にSQL:2016と呼ばれています。 この前のバージョンはSQL:2011、SQL:2008、SQL:2006、SQL:2003、SQL:1999とSQL-92です。 それぞれ前のバージョンを置き換えたバージョンですので、より昔のバージョンへの適合性についての主張には公的な利点がありません。 PostgreSQLの開発では、伝統的な機能もしくは共通の考えと矛盾しないように、標準SQLの最新の公式バージョンに準拠させようとしています。 標準SQLで必須とされた機能の多くは、多少構文や機能に違いはあるものの、サポートされています。 さらに適合性を高めることが将来のリリースで期待されています。
SQL-92では、適合性について、Entry、Intermediate、Fullという3つの機能セットを定義しました。 標準SQLの準拠をうたっているデータベース管理システムのほとんどは、Entryレベルのみに適合しています。 IntermediateもしくはFullレベルの機能の全体的なセットは、非常に膨大になり過ぎるか、もしくは旧来の動作と競合するからです。
SQL:1999から、標準SQLは、SQL-92で見受けられた3レベルに機能を非効率的に分散させるのではなく、個々の機能を大規模な集合として定義されるようになりました。 こうした機能の大規模なサブセットを、全ての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)
ISO/IEC 9075-15 Multi-dimensional arrays (SQL/MDA)
PostgreSQLのコア部分は 1、2、9、11、および14番の部分に対応しています。 第3部分はODBCドライバを、そして第13部分はPL/Javaプラグインを網羅していますが、これらコンポーネントに対する正確な適合性は検証されていません。 4、10および15番の部分は現時点でPostgreSQLに実装されていません。
PostgreSQLはSQL:2016の主な機能のほとんどをサポートします。 完全なコアの互換性に必要な177の必須機能の内、PostgreSQLは少なくとも170個に適合します。 さらに省略可能な機能を数多くサポートします。 本書の執筆時点で、SQL:2016のコアに完全に適合したデータベース管理システムのバージョンはないということを、ここで言及しておくのは価値のあることかもしれません。
以下の2つの節では、PostgreSQLでサポートされているこれらの機能をリストし、その後にPostgreSQLでまだサポートされていないSQL:2016で定義された機能をリストしています。 これら2つのリストはおおよそのものです。 サポート対象であるとリストされている機能が些細な部分で準拠していない可能性があり、サポートされていないある機能の大部分が、実際には実装されている可能性があります。 本書の主要な部分では、動作するものとしないものについての最も正確な情報を常に伝えます。
ハイフンを含む機能コードはサブ機能です。 したがって、特定のサブ機能がサポートされない場合、他のサブ機能がサポートされていてもそのメイン機能はサポートされない機能としてリストされています。