Appendix C. SQL への準拠

Table of Contents
C.1. サポートされている機能
C.2. サポートされていない機能

この節では、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: ハイフンを含む機能コードは、サブ機能です。 したがって、特定のサブ機能がサポートされない場合、他のサブ機能がサポート対象であっても、そのメイン機能はサポートされない機能としてリストされています。

C.1. サポートされている機能

識別子パッケージ説明コメント
B012Core埋め込み C 
B021 ダイレクト SQL 
E011Core数値データ型 
E011-01CoreINTEGER および SMALLINT データ型 
E011-02CoreREAL、DOUBLE PRECISON、および FLOAT データ型 
E011-03CoreDECIMAL および NUMERIC データ型 
E011-04Core算術演算子 
E011-05Core数値比較 
E011-06Core数値データ型間の暗黙的キャスト 
E021Core文字列データ型 
E021-01CoreCHARACTER データ型 
E021-02CoreCHARACTER VARYING データ型 
E021-03Core文字列リテラル 
E021-04CoreCHARACTER_LENGTH 関数 
E021-05CoreOCTET_LENGTH 関数 
E021-06CoreSUBSTRING 関数 
E021-07Core文字列結合 
E021-08CoreUPPER および LOWER 関数 
E021-09CoreTRIM 関数 
E021-10Core文字列データ型間の暗黙的キャスト 
E021-11CorePOSITION 関数 
E011-12Core文字列比較 
E031Core識別子 
E031-01Core区切り識別子 
E031-02Core小文字識別子 
E031-03Coreアンダースコアを識別 
E051Core基本的な問い合わせ指定 
E051-01CoreSELECT DISTINCT 
E051-02CoreGROUP BY 句 
E051-04CoreGROUP BY では <選択リスト> にない列を含むことが可能 
E051-05Core選択リスト項目の名前を変更可能AS が必要
E051-06CoreHAVING 句 
E051-07Core選択リスト内の修飾された * 
E051-08CoreFROM 句での相関名 
E051-09CoreFROM 句で列を改名 
E061Core基本的な述語および検索条件 
E061-01Core比較述語 
E061-02CoreBETWEEN 述語 
E061-03Core値のリストをもつ IN 述語 
E061-04CoreLIKE 述語 
E061-05CoreLIKE 述語 ESCAPE 句 
E061-06CoreNULL 述語 
E061-07Core定量的比較述語 
E061-08CoreEXISTS 述語 
E061-09Core比較述語での副問い合わせ 
E061-11CoreIN 述語での副問い合わせ 
E061-12Core定量的比較述語での副問い合わせ 
E061-13Core相関副問い合わせ 
E061-14Core検索条件 
E071Core基本的な問い合わせ式 
E071-01CoreUNION DISTINCT テーブル演算子 
E071-02CoreUNION ALL テーブル演算子 
E071-03CoreEXCEPT DISTINCT テーブル演算子 
E071-05Coreテーブル演算子によって結合された列が、厳密に同じデータ型である必要がない 
E071-06Core副問い合わせでのテーブル演算子 
E081-01CoreSELECT 権限 
E081-02CoreDELETE 権限 
E081-03Coreテーブルレベルでの INSERT 権限 
E081-04Coreテーブルレベルでの UPDATE 権限 
E081-06Coreテーブルレベルでの REFERENCES 権限 
E091Core設定関数 
E091-01CoreAVG 
E091-02CoreCOUNT 
E091-03CoreMAX 
E091-04CoreMIN 
E091-05CoreSUM 
E091-06Coreすべての定量子 
E091-07CoreDISTINCT 定量子 
E101Core基本的なデータ操作 
E101-01CoreINSERT 文 
E101-03Core検索 UPDATE 文 
E101-04Core検索 DELETE 文 
E111Core単一行 SELECT 文 
E121-01CoreDECLARE CURSOR 
E121-02Core選択リスト内に ORDER BY 句が不要 
E121-03CoreORDER BY 句での評価式 
E121-08CoreCLOSE 文(カーソル)
E121-10Core暗黙的な NEXT をもつ FETCH 文 
E131CoreNULL 値サポート (値の代わりに NULL) 
E141Core基本的な整合性制約 
E141-01CoreNOT NULL 制約 
E141-02CoreNOT NULL 句での UNIQUE (一意性) 制約 
E141-03CorePRIMARY KEY 制約 
E141-04Core参照削除アクションおよび参照更新アクションの両方において、NO ACTION がデフォルトとなっている基本的な FOREIGN KEY (外部キー) 制約 
E141-06CoreCHECK 制約 
E141-07Core列のデフォルト 
E141-08CorePRIMARY KEY に NOT NULL が予測される 
E141-10Core外部キーの名前を任意の順序で指定可能 
E151Coreトランザクションサポート 
E151-01CoreCOMMIT 文 
E151-02CoreROLLBACK 文 
E152-01CoreSET TRANSACTION 文 : ISOLATION LEVEL SERIALIZABLE 句 
E161Core2 つのマイナス記号の後に記述される SQL コメント 
F031Core基本的なスキーマ操作 
F031-01Core永続基本テーブルを作成する CREATE TABLE 文 
F031-02CoreCREATE VIEW 文 
F031-03 CoreGRANT 文 
F031-04 CoreALTER TABLE 文 : ADD COLUMN 句 
F031-13 CoreDROP TABLE 文 : RESTRICT 句 
F031-16 CoreDROP VIEW 文 : RESTRICT 句 
F032 CASCADE ドロップ操作 
F033 ALTER TABLE 文 : DROP COLUMN 句 
F041 Core基本的なテーブル結合 
F041-01 Core内部結合 (ただし、INNER キーワードが必須ではない) 
F041-02 CoreINNER キーワード 
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 CoreDATE データ型 (DATE リテラルのサポートを含む) 
F051-02 Core少なくとも 0 の端数秒精度をもつ TIME データ型 (TIME リテラルのサポートを含む) 
F051-03 Core少なくとも 0 および 6 の端数秒精度をもつ TIME データ型 (TIME リテラルのサポートを含む) 
F051-04 CoreDATE、TIME、および TIMESTAMP データ型における比較述語 
F051-05 Core日時データ型および文字列データ型間の明示的 CAST 
F051-06 CoreCURRENT_DATE 
F051-07 CoreLOCALTIME 
F051-08 CoreLOCALTIMESTAMP 
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 CoreGROUP BY および HAVING 句、およびグループ化されたビューを使用した副問い合わせ 
F131-05 CoreGROUP BY および HAVING 句、およびグループ化されたビューを使用した単一行の SELECT 
F171 ユーザ毎の複数スキーマ 
F191拡張整合性管理参照削除アクション 
F201 CoreCAST 関数 
F221 Core明示的デフォルト 
F222 INSERT 文 : DEFAULT VALUES 句 
F251 ドメインサポート 
F261 CoreCASE 式 
F261-01 Coreシンプルな CASE 
F261-02 Core検索 CASE 
F261-03 CoreNULLIF 
F261-04 CoreCOALESCE 
F271 複合文字列リテラル 
F281 LIKE 拡張 
F302OLAP 機能INTERSECT テーブル演算子 
F302-01OLAP 機能INTERSECT DISTINCT テーブル演算子 
F302-02OLAP 機能INTERSECT ALL テーブル演算子 
F304OLAP 機能EXCEPT ALL テーブル演算子 
F311 Coreスキーマ定義文 
F311-01 CoreCREATE SCHEMA 
F311-02 Core永続基本テーブルのための CREATE TABLE 
F311-03 CoreCREATE VIEW 
F311-05 CoreGRANT 文 
F321 ユーザ許可 
F361 サブプログラムサポート 
F381 拡張スキーマ操作 
F381-01 ALTER TABLE 文 : ALTER COLUMN 句 
F381-02 ALTER TABLE 文 : ADD CONSTRAINT 句 
F381-03 ALTER TABLE 文 : DROP CONSTRAINT 句 
F391 長い識別子 
F401OLAP 機能拡張結合テーブル 
F401-01OLAP 機能自然結合 (NATURAL JOIN) 
F401-02OLAP 機能完全外部結合(FULL OUTER JOIN) 
F401-03OLAP 機能UNION JOIN 
F401-04OLAP 機能クロス結合 (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 真理値テスト 
F591OLAP 機能派生テーブル 
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関数呼び出し 
T322PSM、SQL/MM サポートSQL 呼び出し関数およびプロシージャのオーバーロード 
T323 外部ルーチンへの明示的セキュリティー 
T351 囲われた SQL コメント (/*...*/ コメント) 
T441 ABS および MOD 関数 
T501 拡張 EXISTS 述語 
T551 デフォルト構文のオプションキーワード 
T581 正規表現での部分文字列関数 
T591 NULL 許容列での UNIQUE (一意性) 制約