この節では、PostgreSQL がどの程度 SQL 標準に準拠しているかについて、概要を説明します。 SQL 標準への完全な準拠、もしくは SQL 標準への準拠に関する完全な説明を行うと内容が複雑になり、特に有益ではないため、この節では概要のみを説明します。
SQL 標準の公式な名称は、ISO/IEC 9075 「Database Language SQL」です。 この SQL 標準が改訂されたバージョンが、不定期にリリースされています。最新バージョンは、1999 年に発表されました。 最新バージョンは、ISO/IEC 9075:1999、または、非公式には SQL99 と呼ばれています。 SQL99 の 1 つ前のバージョンは、SQL92 です。 PostgreSQL の開発では、伝統的な機能もしくは共通の考えと矛盾しないように、SQL 標準の最新の公式バージョンに準拠させようとしています。 これを書いた時点では、SQL 標準の新しい改訂版についての討論はまだ進行中です。改訂版が承認されれば、今後の PostgreSQL 開発において、準拠の対象となるでしょう。
SQL92 では、適合性について 3 つの機能セット (Entry、Intermediate、および Full) を定義していました。 SQL 標準への準拠をうたっている多くのデータベース製品では、Entry レベルでしか適合していません。Intermediate もしくは Full レベルの機能の全体的なセットは、非常に大量になりすぎるか、もしくは旧来の動作と競合するからです。
SQL99 では、SQL92 で使用されていた不必要に広範囲な 3 つのレベルの代わりに、個々の機能の大規模なセットを定義しています。 これらの機能の大規模なサブセットは、「核」となる機能を表します。これは、準拠する SQL のすべてが備える必要のある機能です。 残りの機能は、完全にオプションです。 オプション機能の中には、SQL 実装が準拠していることを宣言できる「パッケージ」としてグループ化されるものもあります。つまり、特定の機能のグループへの準拠が可能です。
また、SQL99 標準は、5 つの部分に分かれています。 フレームワーク、ファウンデーション、コールレベルインターフェイス、永続格納モジュール、およびホスト言語バインディングです。 PostgreSQL では、フレームワーク、ファウンデーション、およびホスト言語バインディングのみをカバーしています。 コールレベルインターフェイスは、ODBC インターフェイスと似ており、永続格納モジュールは、PL/pgSQL プログラミング言語と似ています。しかし、どちらの場合も、完全な準拠は特に意図されていません。
以下の 2 つの節では、PostgreSQL でサポートされているこれらの機能をリストし、その後に、PostgreSQL でまだサポートされていない SQL99 で定義された機能をリストしています。 これら 2 つのリストは、大変よく似ています。 サポート対象であるとリストされている機能が些細な部分で準拠していない可能性があり、サポートされていないある機能の大部分が、実際には実装されている可能性があります。 このドキュメントの主要な部分では、常に、動作するものとしないものについての最も正確な情報を伝えています。
Note: ハイフンを含む機能コードは、サブ機能です。 したがって、特定のサブ機能がサポートされない場合、他のサブ機能がサポート対象であっても、そのメイン機能はサポートされない機能としてリストされています。
| 識別子 | パッケージ | 説明 | コメント |
|---|---|---|---|
| B012 | Core | 埋め込み C | |
| B021 | ダイレクト SQL | ||
| E011 | Core | 数値データ型 | |
| E011-01 | Core | INTEGER および SMALLINT データ型 | |
| E011-02 | Core | REAL、DOUBLE PRECISON、および FLOAT データ型 | |
| E011-03 | Core | DECIMAL および NUMERIC データ型 | |
| E011-04 | Core | 算術演算子 | |
| E011-05 | Core | 数値比較 | |
| E011-06 | Core | 数値データ型間の暗黙的キャスト | |
| E021 | Core | 文字列データ型 | |
| E021-01 | Core | CHARACTER データ型 | |
| E021-02 | Core | CHARACTER VARYING データ型 | |
| E021-03 | Core | 文字列リテラル | |
| E021-04 | Core | CHARACTER_LENGTH 関数 | |
| E021-05 | Core | OCTET_LENGTH 関数 | |
| E021-06 | Core | SUBSTRING 関数 | |
| E021-07 | Core | 文字列結合 | |
| E021-08 | Core | UPPER および LOWER 関数 | |
| E021-09 | Core | TRIM 関数 | |
| E021-10 | Core | 文字列データ型間の暗黙的キャスト | |
| E021-11 | Core | POSITION 関数 | |
| E011-12 | Core | 文字列比較 | |
| E031 | Core | 識別子 | |
| E031-01 | Core | 区切り識別子 | |
| E031-02 | Core | 小文字識別子 | |
| E031-03 | Core | アンダースコアを識別 | |
| E051 | Core | 基本的な問い合わせ指定 | |
| E051-01 | Core | SELECT DISTINCT | |
| E051-02 | Core | GROUP BY 句 | |
| E051-04 | Core | GROUP BY では <選択リスト> にない列を含むことが可能 | |
| E051-05 | Core | 選択リスト項目の名前を変更可能 | AS が必要 |
| E051-06 | Core | HAVING 句 | |
| E051-07 | Core | 選択リスト内の修飾された * | |
| E051-08 | Core | FROM 句での相関名 | |
| E051-09 | Core | FROM 句で列を改名 | |
| E061 | Core | 基本的な述語および検索条件 | |
| E061-01 | Core | 比較述語 | |
| E061-02 | Core | BETWEEN 述語 | |
| E061-03 | Core | 値のリストをもつ IN 述語 | |
| E061-04 | Core | LIKE 述語 | |
| E061-05 | Core | LIKE 述語 ESCAPE 句 | |
| E061-06 | Core | NULL 述語 | |
| E061-07 | Core | 定量的比較述語 | |
| E061-08 | Core | EXISTS 述語 | |
| E061-09 | Core | 比較述語での副問い合わせ | |
| E061-11 | Core | IN 述語での副問い合わせ | |
| E061-12 | Core | 定量的比較述語での副問い合わせ | |
| E061-13 | Core | 相関副問い合わせ | |
| E061-14 | Core | 検索条件 | |
| E071 | Core | 基本的な問い合わせ式 | |
| E071-01 | Core | UNION DISTINCT テーブル演算子 | |
| E071-02 | Core | UNION ALL テーブル演算子 | |
| E071-03 | Core | EXCEPT DISTINCT テーブル演算子 | |
| E071-05 | Core | テーブル演算子によって結合された列が、厳密に同じデータ型である必要がない | |
| E071-06 | Core | 副問い合わせでのテーブル演算子 | |
| E081-01 | Core | SELECT 権限 | |
| E081-02 | Core | DELETE 権限 | |
| E081-03 | Core | テーブルレベルでの INSERT 権限 | |
| E081-04 | Core | テーブルレベルでの UPDATE 権限 | |
| E081-06 | Core | テーブルレベルでの REFERENCES 権限 | |
| E091 | Core | 設定関数 | |
| E091-01 | Core | AVG | |
| E091-02 | Core | COUNT | |
| E091-03 | Core | MAX | |
| E091-04 | Core | MIN | |
| E091-05 | Core | SUM | |
| E091-06 | Core | すべての定量子 | |
| E091-07 | Core | DISTINCT 定量子 | |
| E101 | Core | 基本的なデータ操作 | |
| E101-01 | Core | INSERT 文 | |
| E101-03 | Core | 検索 UPDATE 文 | |
| E101-04 | Core | 検索 DELETE 文 | |
| E111 | Core | 単一行 SELECT 文 | |
| E121-01 | Core | DECLARE CURSOR | |
| E121-02 | Core | 選択リスト内に ORDER BY 句が不要 | |
| E121-03 | Core | ORDER BY 句での評価式 | |
| E121-08 | Core | CLOSE 文 | (カーソル) |
| E121-10 | Core | 暗黙的な NEXT をもつ FETCH 文 | |
| E131 | Core | NULL 値サポート (値の代わりに NULL) | |
| E141 | Core | 基本的な整合性制約 | |
| E141-01 | Core | NOT NULL 制約 | |
| E141-02 | Core | NOT NULL 句での UNIQUE (一意性) 制約 | |
| E141-03 | Core | PRIMARY KEY 制約 | |
| E141-04 | Core | 参照削除アクションおよび参照更新アクションの両方において、NO ACTION がデフォルトとなっている基本的な FOREIGN KEY (外部キー) 制約 | |
| E141-06 | Core | CHECK 制約 | |
| E141-07 | Core | 列のデフォルト | |
| E141-08 | Core | PRIMARY KEY に NOT NULL が予測される | |
| E141-10 | Core | 外部キーの名前を任意の順序で指定可能 | |
| E151 | Core | トランザクションサポート | |
| E151-01 | Core | COMMIT 文 | |
| E151-02 | Core | ROLLBACK 文 | |
| E152-01 | Core | SET TRANSACTION 文 : ISOLATION LEVEL SERIALIZABLE 句 | |
| E161 | Core | 2 つのマイナス記号の後に記述される SQL コメント | |
| F031 | Core | 基本的なスキーマ操作 | |
| F031-01 | Core | 永続基本テーブルを作成する CREATE TABLE 文 | |
| F031-02 | Core | CREATE VIEW 文 | |
| F031-03 | Core | GRANT 文 | |
| F031-04 | Core | ALTER TABLE 文 : ADD COLUMN 句 | |
| F031-13 | Core | DROP TABLE 文 : RESTRICT 句 | |
| F031-16 | Core | DROP VIEW 文 : RESTRICT 句 | |
| F032 | CASCADE ドロップ操作 | ||
| F033 | ALTER TABLE 文 : DROP COLUMN 句 | ||
| F041 | Core | 基本的なテーブル結合 | |
| F041-01 | Core | 内部結合 (ただし、INNER キーワードが必須ではない) | |
| F041-02 | Core | INNER キーワード | |
| F041-03 | Core | 左外部結合(LEFT OUTER JOIN) | |
| F041-04 | Core | 右外部結合(RIGHT OUTER JOIN) | |
| F041-05 | Core | 外部結合がネスト可能 | |
| F041-07 | Core | 左または右外部結合での内部テーブルも、内部結合で使用可能 | |
| F041-08 | Core | (単に = だけでなく) すべての比較演算子がサポートされる | |
| F051 | Core | 基本的な日付および時刻 | |
| F051-01 | Core | DATE データ型 (DATE リテラルのサポートを含む) | |
| F051-02 | Core | 少なくとも 0 の端数秒精度をもつ TIME データ型 (TIME リテラルのサポートを含む) | |
| F051-03 | Core | 少なくとも 0 および 6 の端数秒精度をもつ TIME データ型 (TIME リテラルのサポートを含む) | |
| F051-04 | Core | DATE、TIME、および TIMESTAMP データ型における比較述語 | |
| F051-05 | Core | 日時データ型および文字列データ型間の明示的 CAST | |
| F051-06 | Core | CURRENT_DATE | |
| F051-07 | Core | LOCALTIME | |
| F051-08 | Core | LOCALTIMESTAMP | |
| F052 | 拡張日時機能 | 間隔および日時の算術 | |
| F081 | Core | ビューでの UNION および EXCEPT | |
| F111-02 | READ COMMITTED 隔離レベル | ||
| F131 | Core | グループ化演算 | |
| F131-01 | Core | グループ化されたビューを使用した問い合わせでサポートされている WHERE、GROUP BY、および HAVING 句 | |
| F131-02 | Core | グループ化されたビューを使用した問い合わせでサポートされている複数テーブル | |
| F131-03 | Core | グループ化されたビューを使用した問い合わせでサポートされている設定関数 | |
| F131-04 | Core | GROUP BY および HAVING 句、およびグループ化されたビューを使用した副問い合わせ | |
| F131-05 | Core | GROUP BY および HAVING 句、およびグループ化されたビューを使用した単一行の SELECT | |
| F171 | ユーザ毎の複数スキーマ | ||
| F191 | 拡張整合性管理 | 参照削除アクション | |
| F201 | Core | CAST 関数 | |
| F221 | Core | 明示的デフォルト | |
| F222 | INSERT 文 : DEFAULT VALUES 句 | ||
| F251 | ドメインサポート | ||
| F261 | Core | CASE 式 | |
| F261-01 | Core | シンプルな CASE | |
| F261-02 | Core | 検索 CASE | |
| F261-03 | Core | NULLIF | |
| F261-04 | Core | COALESCE | |
| F271 | 複合文字列リテラル | ||
| F281 | LIKE 拡張 | ||
| F302 | OLAP 機能 | INTERSECT テーブル演算子 | |
| F302-01 | OLAP 機能 | INTERSECT DISTINCT テーブル演算子 | |
| F302-02 | OLAP 機能 | INTERSECT ALL テーブル演算子 | |
| F304 | OLAP 機能 | EXCEPT ALL テーブル演算子 | |
| F311 | Core | スキーマ定義文 | |
| F311-01 | Core | CREATE SCHEMA | |
| F311-02 | Core | 永続基本テーブルのための CREATE TABLE | |
| F311-03 | Core | CREATE VIEW | |
| F311-05 | Core | GRANT 文 | |
| F321 | ユーザ許可 | ||
| F361 | サブプログラムサポート | ||
| F381 | 拡張スキーマ操作 | ||
| F381-01 | ALTER TABLE 文 : ALTER COLUMN 句 | ||
| F381-02 | ALTER TABLE 文 : ADD CONSTRAINT 句 | ||
| F381-03 | ALTER TABLE 文 : DROP CONSTRAINT 句 | ||
| F391 | 長い識別子 | ||
| F401 | OLAP 機能 | 拡張結合テーブル | |
| F401-01 | OLAP 機能 | 自然結合 (NATURAL JOIN) | |
| F401-02 | OLAP 機能 | 完全外部結合(FULL OUTER JOIN) | |
| F401-03 | OLAP 機能 | UNION JOIN | |
| F401-04 | OLAP 機能 | クロス結合 (CROSS JOIN) | |
| F411 | 拡張日時機能 | 時間帯指定 | |
| F421 | 各国文字 | ||
| F431-01 | 明示的な NEXT をもつ FETCH | ||
| F431-04 | FETCH PRIOR | ||
| F431-06 | FETCH RELATIVE | ||
| F441 | 拡張設定関数サポート | ||
| F471 | Core | スカラ型副問い合わせ値 | |
| F481 | Core | 拡張 NULL 述語 | |
| F491 | 拡張整合性管理 | 制約管理 | |
| F511 | BIT データ型 | ||
| F531 | 一時テーブル | ||
| F555 | 拡張日時機能 | 拡張秒精度 | |
| F561 | 完全評価式 | ||
| F571 | 真理値テスト | ||
| F591 | OLAP 機能 | 派生テーブル | |
| F611 | 指標データ型 | ||
| F651 | カタログ名修飾子 | ||
| F701 | 拡張整合性管理 | 参照更新アクション | |
| F761 | セッション管理 | ||
| F791 | あいまいカーソル | ||
| F801 | 完全設定関数 | ||
| S071 | 拡張オブジェクトサポート | 関数および型名解決における SQL パス | |
| S111 | 拡張オブジェクトサポート | 問い合わせ式での ONLY | |
| S211 | 拡張オブジェクトサポート、SQL/MM サポート | ユーザ定義キャスト関数 | |
| T031 | BOOLEAN データ型 | ||
| T141 | SIMILAR 述語 | ||
| T151 | DISTINCT 述語 | ||
| T191 | 拡張整合性管理 | 参照アクション RESTRICT | |
| T201 | 拡張整合性管理 | 参照制約での比較可能データ型 | |
| T211-01 | 拡張整合性管理 | 1 つの基本テーブルでの UPDATE、INSERT、または DELETE でアクティブにされたトリガ | |
| T211-02 | 拡張整合性管理 | BEFORE トリガ | |
| T211-03 | 拡張整合性管理 | AFTER トリガ | |
| T211-04 | 拡張整合性管理 | FOR EACH ROW トリガ | |
| T211-07 | 拡張整合性管理 | TRIGGER 権限 | |
| T231 | SENSITIVE カーソル | ||
| T241 | START TRANSACTION 文 | ||
| T312 | OVERLAY 関数 | ||
| T321-01 | Core | オーバーロードしないユーザ定義関数 | |
| T321-03 | Core | 関数呼び出し | |
| T322 | PSM、SQL/MM サポート | SQL 呼び出し関数およびプロシージャのオーバーロード | |
| T323 | 外部ルーチンへの明示的セキュリティー | ||
| T351 | 囲われた SQL コメント (/*...*/ コメント) | ||
| T441 | ABS および MOD 関数 | ||
| T501 | 拡張 EXISTS 述語 | ||
| T551 | デフォルト構文のオプションキーワード | ||
| T581 | 正規表現での部分文字列関数 | ||
| T591 | NULL 許容列での UNIQUE (一意性) 制約 |