本節では、PostgreSQLがどの程度現在の標準SQLに準拠しているかについて、概要を説明します。 以下の情報は互換性についての完全な説明ではありません。 しかし、ユーザにとって十分適切かつ有用な詳細を主な話題としてここで示しています。
標準SQLの公式な名称は、ISO/IEC 9075 "Database Language SQL"です。 この標準SQLの改訂バージョンは不定期にリリースされています。 最新バージョンは2003年に発表されました。 最新バージョンはISO/IEC 9075:2003、もしくは単にSQL:2003と呼ばれています。 この1つ前のバージョンはSQL:1999とSQL-92です。 それぞれ前のバージョンを置き換えたバージョンですので、より昔のバージョンへの適合性についての主張には公的な利点がありません。 PostgreSQLの開発では、伝統的な機能もしくは共通の考えと矛盾しないように、標準SQLの最新の公式バージョンに準拠させようとしています。 PostgreSQLプロジェクトは、SQL:2003の制定中にISO/IEC 9075ワーキンググループに代表を出していませんでした。 しかし、SQL:2003で必須とされた機能の多くは、多少構文や機能に違いはあるものの、既にサポートされていました。 さらに適合性を高めることが将来のリリースで期待されています。
SQL-92では、適合性について、Entry、Intermediate、Fullという3つの機能セットを定義しました。 標準SQLの準拠をうたっているデータベース管理システムのほとんどは、Entryレベルのみに適合しています。 IntermediateもしくはFullレベルの機能の全体的なセットは、非常に膨大になり過ぎるか、もしくは旧来の動作と競合するからです。
SQL:1999から、標準SQLは、SQL-92で見受けられた3レベルに機能を非効率的に分散させるのではなく、個々の機能を大規模な集合として定義されるようになりました。 こうした機能の大規模なサブセットを、全てのSQL準拠の実装が提供しなければならない"コア"機能として表しています。 いくつかの省略可能な機能は"パッケージ"という形にまとめられ、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)
PostgreSQLは 1、2、および11番の部品に対応しています。
コールレベルインタフェースはODBCインタフェースと似ており、永続格納モジュールはPL/pgSQLプログラミング言語と似ています。 しかし、どちらの場合も完全な準拠は特に意図されていませんし、検証されていません。
PostgreSQLはSQL:2003の主な機能のほとんどをサポートします。 完全なコアの互換性に必要な164の必須機能のうち、PostgreSQLは少なくとも150個に適合します。 さらに、省略可能な機能を数多くサポートします。 ここに記載する必要はないかもしれませんが、本書の執筆時点で、SQL:2003のコアに完全に適合したデータベース管理システムのバージョンはありません。
以下の2つの節では、PostgreSQLでサポートされているこれらの機能をリストし、その後にPostgreSQLでまだサポートされていないSQL:2003で定義された機能をリストしています。 これら2つのリストは大変よく似ています。 サポート対象であるとリストされている機能が些細な部分で準拠していない可能性があり、サポートされていないある機能の大部分が、実際には実装されている可能性があります。 本書の主要な部分では、動作するものとしないものについての最も正確な情報を常に伝えます。
注意: ハイフンを含む機能コードはサブ機能です。 したがって、特定のサブ機能がサポートされない場合、他のサブ機能がサポートされていてもそのメイン機能はサポートされない機能としてリストされています。
| 識別子 | パッケージ | 説明 | コメント |
|---|---|---|---|
| B012 | 埋め込みC | ||
| B021 | 直接SQL | ||
| E011 | コア | 数値データ型 | |
| E011-01 | コア | INTEGERおよびSMALLINTデータ型 | |
| E011-02 | コア | REAL、DOUBLE PRECISION、FLOATデータ型 | |
| E011-03 | コア | DECIMALおよびNUMERICデータ型 | |
| E011-04 | コア | 算術演算子 | |
| E011-05 | コア | 数値比較 | |
| E011-06 | コア | 数値データ型間の暗黙キャスト | |
| E021 | コア | 文字データ型 | |
| E021-01 | コア | CHARACTERデータ型 | |
| E021-02 | コア | CHARACTER VARYINGデータ型 | |
| E021-03 | コア | 文字リテラル | |
| E021-04 | コア | CHARACTER_LENGTH関数 | 数える前にCHARACTER値の最後の空白を除去します。 |
| E021-05 | コア | OCTET_LENGTH関数 | |
| E021-06 | コア | SUBSTRING関数 | |
| E021-07 | コア | 文字の連結 | |
| E021-08 | コア | UPPERおよびLOWER関数 | |
| E021-09 | コア | TRIM関数 | |
| E021-10 | コア | 文字列型間の暗黙的キャスト | |
| E021-11 | コア | POSITION関数 | |
| E021-12 | コア | 文字の比較 | |
| E031 | コア | 識別子 | |
| E031-01 | コア | 制限付き識別子 | |
| E031-02 | コア | 小文字の識別子 | |
| E031-03 | コア | 末尾のアンダースコア | |
| E051 | コア | 基本問い合わせ仕様 | |
| E051-01 | コア | SELECT DISTINCT | |
| E051-02 | コア | GROUP BY句 | |
| E051-04 | コア | 選択リストにない句を持つGROUP BYが可能 | |
| E051-05 | コア | 選択リスト項目の名前変更が可能 | ASが必要です。 |
| E051-06 | コア | HAVING句 | |
| E051-07 | コア | 選択リスト内の修飾付き* | |
| E051-08 | コア | FROM句内の相関名 | |
| E051-09 | コア | FROM句内の列名の変更 | |
| E061 | コア | 基本述部および検索条件 | |
| E061-01 | コア | 比較述部 | |
| E061-02 | コア | BETWEEN 述部 | |
| E061-03 | コア | 値のリストが付いたIN述部 | |
| E061-04 | コア | LIKE 述部 | |
| E061-05 | コア | ESCAPE句付きのLIKE 述部 | |
| E061-06 | コア | NULL 述部 | |
| E061-07 | コア | 修飾付き比較述部 | |
| E061-08 | コア | EXISTS述部 | |
| E061-09 | コア | 比較術部内の副問い合わせ | |
| E061-11 | コア | IN述部内の副問い合わせ | |
| E061-12 | コア | 修飾付き比較述部内の副問い合わせ | |
| E061-13 | コア | 相関副問い合わせ | |
| E061-14 | コア | 検索条件 | |
| E071 | コア | 基本問い合わせ式 | |
| E071-01 | コア | UNION DISTINCTテーブル演算子 | |
| E071-02 | コア | UNION ALL テーブル演算子 | |
| E071-03 | コア | EXCEPT DISTINCT テーブル演算子 | |
| E071-05 | コア | 正確に同一のデータ型を持つ必要がないテーブル演算子経由の列の結合 | |
| E071-06 | コア | 副問い合わせ内のテーブル演算子 | |
| E081-01 | コア | SELECT権限 | |
| E081-02 | コア | DELETE権限 | |
| E081-03 | コア | テーブルレベルのINSERT権限 | |
| E081-04 | コア | テーブルレベルのUPDATE権限 | |
| E081-06 | コア | テーブルレベルのREFERENCES権限 | |
| E081-08 | コア | WITH GRANT OPTION | |
| E081-10 | コア | EXECUTE権限 | |
| E091 | コア | 集合関数 | |
| E091-01 | コア | AVG | |
| E091-02 | コア | COUNT | |
| E091-03 | コア | MAX | |
| E091-04 | コア | MIN | |
| E091-05 | コア | SUM | |
| E091-06 | コア | ALL修飾子 | |
| E091-07 | コア | DISTINCT修飾子 | |
| E101 | コア | 基本データ操作 | |
| E101-01 | コア | INSERT 文 | |
| E101-03 | コア | Searched UPDATE 文 | |
| E101-04 | コア | Searched DELETE 文 | |
| E111 | コア | 単一行SELECT文 | |
| E121-01 | コア | DECLARE CURSOR | |
| E121-02 | コア | ORDER BY の列は選択リスト内に不要 | |
| E121-03 | コア | ORDER BY句内の値式 | |
| E121-04 | コア | OPEN文 | |
| E121-08 | コア | CLOSE 文 | |
| E121-10 | コア | FETCH 文、暗黙的なNEXT | |
| E121-17 | コア | WITH HOLDカーソル | |
| E131 | コア | NULL値のサポート(値の変わりとなるNULL) | |
| E141 | コア | 基本整合性制約 | |
| E141-01 | コア | NOT NULL制約 | |
| E141-02 | コア | NOT NULL句用のUNIQUE制約 | |
| E141-03 | コア | PRIMARY KEY制約 | |
| E141-04 | コア | 参照削除動作、参照更新動作の両方でNO ACTIONをデフォルトで持つ基本FOREIGN KEY制約 | |
| E141-06 | コア | CHECK制約 | |
| E141-07 | コア | 列デフォルト | |
| E141-08 | コア | PRIMARY KEYはNOT NULLを意味する | |
| E141-10 | コア | 外部キー名の指定順序は任意 | |
| E151 | コア | トランザクションサポート | |
| E151-01 | コア | COMMIT 文 | |
| E151-02 | コア | ROLLBACK 文 | |
| E152 | コア | 基本SET TRANSACTION文 | |
| E152-01 | コア | SET TRANSACTION 文: ISOLATION LEVEL SERIALIZABLE句 | |
| E152-02 | コア | SET TRANSACTION 文: READ ONLY and READ WRITE句 | |
| E161 | コア | 二重のマイナス記号から始まるSQLコメント | |
| E171 | コア | SQLSTATEサポート | |
| F021 | コア | 基本情報スキーマ | |
| F021-01 | コア | COLUMNS ビュー | |
| F021-02 | コア | TABLES ビュー | |
| F021-03 | コア | VIEWS ビュー | |
| F021-04 | コア | TABLE_CONSTRAINTS ビュー | |
| F021-05 | コア | REFERENTIAL_CONSTRAINTS ビュー | |
| F021-06 | コア | CHECK_CONSTRAINTS ビュー | |
| F031 | コア | 基本スキーマ操作 | |
| F031-01 | コア | 永続基礎テーブルを作成するCREATE TABLE文 | |
| F031-02 | コア | CREATE VIEW文 | |
| F031-03 | コア | GRANT文 | |
| F031-04 | コア | ALTER TABLE文: ADD COLUMN句 | |
| F031-13 | コア | DROP TABLE 文: RESTRICT句 | |
| F031-16 | コア | DROP VIEW 文: RESTRICT句 | |
| F031-19 | コア | REVOKE 文: RESTRICT句 | |
| F032 | CASCADE削除動作 | ||
| F033 | ALTER TABLE文: DROP COLUMN句 | ||
| F034 | 拡張REVOKE文 | ||
| F034-01 | スキーマオブジェクトの所有者以外が実行するREVOKE文 | ||
| F034-02 | REVOKE 文: GRANT OPTION FOR句 | ||
| F034-03 | 被譲与者がWITH GRANT OPTIONを持つ権限を削除するREVOKE 文 | ||
| F041 | コア | 基本結合テーブル | |
| F041-01 | コア | 内部結合(INNERキーワードは不要) | |
| F041-02 | コア | INNERキーワード | |
| F041-03 | コア | LEFT OUTER JOIN | |
| F041-04 | コア | RIGHT OUTER JOIN | |
| F041-05 | コア | 入れ子にできる外部結合 | |
| F041-07 | コア | 左または右外部結合の内部テーブルは内部結合内でも使用可能 | |
| F041-08 | コア | 全ての比較演算子のサポート(単なる=は除く) | |
| F051 | コア | 基本日付時刻 | |
| F051-01 | コア | DATE データ型 (DATEリテラルのサポートを含む) | |
| F051-02 | コア | 少なくとも0の秒精度を持つTIME データ型 (TIMEリテラルのサポートを含む) | |
| F051-03 | コア | 少なくとも0と6の秒精度を持つTIMESTAMP データ型 (TIMESTAMPリテラルのサポートを含む) | |
| F051-04 | コア | DATE、TIME、TIMESTAMPデータ型に対する比較述部 | |
| F051-05 | コア | 日付時刻型と文字列型間の明示的なキャスト | |
| F051-06 | コア | CURRENT_DATE | |
| F051-07 | コア | LOCALTIME | |
| F051-08 | コア | LOCALTIMESTAMP | |
| F052 | 拡張日付時刻機能 | 時間間隔および日付時刻計算 | |
| F053 | OVERLAPS 述部 | ||
| F081 | コア | ビューのUNIONおよびEXCEPT | |
| F111 | SERIALIZABLE以外の隔離レベル | ||
| F111-01 | READ UNCOMMITTED隔離レベル | ||
| F111-02 | READ COMMITTED隔離レベル | ||
| F111-03 | REPEATABLE READ隔離レベル | ||
| F131 | コア | グループ化操作 | |
| F131-01 | コア | グループ化されたビューを使用する問い合わせにおけるWHERE、GROUP BY、HAVING句のサポート | |
| F131-02 | コア | グループ化されたビューを使用する問い合わせにおける複数テーブルのサポート | |
| F131-03 | コア | グループ化されたビューを使用する問い合わせにおける集合関数のサポート | |
| F131-04 | コア | GROUP BY、HAVING句、グループ化されたビューを持つ副問い合わせ | |
| F131-05 | コア | GROUP BY、HAVING句、グループ化されたビューを持つ単一行SELECT | |
| F171 | ユーザ毎の複数スキーマ | ||
| F191 | 拡張整合性管理 | 参照削除動作 | |
| F201 | コア | CAST関数 | |
| F221 | コア | 明示的なデフォルト | |
| F222 | INSERT文: DEFAULT VALUES句 | ||
| F231 | 権限テーブル | ||
| F231-01 | TABLE_PRIVILEGESビュー | ||
| F231-02 | COLUMN_PRIVILEGESビュー | ||
| F231-03 | USAGE_PRIVILEGESビュー | ||
| F251 | ドメインサポート | ||
| F261 | コア | CASE式 | |
| F261-01 | コア | 単純なCASE | |
| F261-02 | コア | 検索付きCASE | |
| F261-03 | コア | NULLIF | |
| F261-04 | コア | COALESCE | |
| F271 | 複合文字リテラル | ||
| F281 | 高度なLIKE | ||
| F302 | INTERSECTテーブル演算子 | ||
| F302-01 | INTERSECT DISTINCTテーブル演算子 | ||
| F302-02 | INTERSECT ALLテーブル演算子 | ||
| F304 | EXCEPT ALLテーブル演算子 | ||
| F311-01 | コア | CREATE SCHEMA | |
| F311-02 | コア | 永続基礎テーブル用のCREATE TABLE | |
| F311-03 | コア | CREATE VIEW | |
| F311-05 | コア | GRANT 文 | |
| F321 | ユーザ認証 | ||
| F361 | 副プログラムのサポート | ||
| F381 | 拡張スキーマ操作 | ||
| F381-01 | ALTER TABLE 文: ALTER COLUMN句 | ||
| F381-02 | ALTER TABLE 文: ADD CONSTRAINT句 | ||
| F381-03 | ALTER TABLE 文: DROP CONSTRAINT句 | ||
| F391 | 長い識別子 | ||
| F401 | 拡張結合テーブル | ||
| F401-01 | NATURAL JOIN | ||
| F401-02 | FULL OUTER JOIN | ||
| F401-04 | CROSS JOIN | ||
| F411 | 拡張日付時刻機能 | 時間帯指定 | リテラル解釈に関する違いあり |
| F421 | 各国言語 | ||
| F431 | 読み取りのみのスクロール可能なカーソル | ||
| F431-01 | 明示的なNEXTを持つFETCH | ||
| F431-02 | FETCH FIRST | ||
| F431-03 | FETCH LAST | ||
| F431-04 | FETCH PRIOR | ||
| F431-05 | FETCH ABSOLUTE | ||
| F431-06 | FETCH RELATIVE | ||
| F441 | 拡張集合関数のサポート | ||
| F471 | コア | 巣から副問い合わせ値 | |
| F481 | コア | 拡張NULL述部 | |
| F491 | 拡張整合性管理 | 制約管理 | |
| F501 | コア | 機能と準拠ビュー | |
| F501-01 | コア | SQL_FEATURESビュー | |
| F501-02 | コア | SQL_SIZINGビュー | |
| F501-03 | コア | SQL_LANGUAGESビュー | |
| F502 | 高度ドキュメントテーブル | ||
| F502-01 | SQL_SIZING_PROFILESビュー | ||
| F502-02 | SQL_IMPLEMENTATION_INFOビュー | ||
| F502-03 | SQL_PACKAGESビュー | ||
| F531 | 一時テーブル | ||
| F555 | 拡張日付時刻機能 | 高度な秒精度 | |
| F561 | 完全な値式 | ||
| F571 | 真値試験 | ||
| F591 | 派生テーブル | ||
| F611 | 指示子データ型 | ||
| F651 | カタログ名修飾子 | ||
| F672 | 遡及的検査制約 | ||
| F701 | 拡張整合性管理 | 参照更新動作 | |
| F711 | ドメインのALTER | ||
| F761 | セッション管理 | ||
| F771 | 接続管理 | ||
| F781 | 自己参照操作 | ||
| F791 | 非sensitiveカーソル | ||
| F801 | 完全な集合関数 | ||
| S071 | 拡張オブジェクトサポート | 関数内のSQLパスおよび型名の解決 | |
| S111 | 拡張オブジェクトサポート | 問い合わせ式内のONLY | |
| S211 | 拡張オブジェクトサポート | ユーザ定義キャスト関数 | |
| T031 | BOOLEANデータ型 | ||
| T071 | BIGINTデータ型 | ||
| T141 | SIMILAR述部 | ||
| T151 | DISTINCT述部 | ||
| T171 | テーブル定義内のLIKE句 | ||
| T191 | 拡張整合性管理 | 参照動作のRESTRICT | |
| T201 | 拡張整合性管理 | 参照制約向けの比較可能データ型 | |
| T211-01 | 動的データベース, 拡張整合性管理 | 基礎テーブルのUPDATE、INSERT、DELETEで駆動されるトリガ | |
| T211-02 | 動的データベース, 拡張整合性管理 | BEFOREトリガ | |
| T211-03 | 動的データベース, 拡張整合性管理 | AFTERトリガ | |
| T211-04 | 動的データベース, 拡張整合性管理 | FOR EACH ROWトリガ | |
| T211-07 | 動的データベース, 拡張整合性管理 | TRIGGER権限 | |
| T212 | 拡張整合性管理 | 高度トリガ機能 | |
| T231 | Sensitiveカーソル | ||
| T241 | START TRANSACTION文 | ||
| T271 | セーブポイント | ||
| T312 | OVERLAY関数 | ||
| T321-01 | コア | オーバーロードがないユーザ定義関数 | |
| T321-03 | コア | 関数呼び出し | |
| T321-06 | コア | ROUTINESビュー | |
| T321-07 | コア | PARAMETERSビュー | |
| T322 | PSM | SQLが呼び出す関数、プロシージャのオーバーロード | |
| T323 | 外部ルーチンに対する明示的なセキュリティ | ||
| T351 | はさまれたSQLコメント(/*...*/ コメント) | ||
| T441 | ABSおよびMOD関数 | ||
| T461 | 対称BETWEEN述部 | ||
| T501 | 高度なEXISTS述部 | ||
| T551 | デフォルト構文用の省略可能なキーワード | ||
| T581 | 正規表現部分文字列関数 | ||
| T591 | NULL列を含むUNIQUE制約 |