他のバージョンの文書9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

付録 D. SQL への準拠

目次
D.1. サポートされている機能
D.2. サポートされていない機能

この節では、PostgreSQLがどの程度現在の標準SQLに準拠しているかについて、概要を説明します。 以下の情報は互換性についての完全な説明ではありません。 しかし、ユーザにとって十分適切かつ有用な詳細を主な話題としてここで示しています。

標準SQLの公式な名称は、ISO/IEC 9075 "Database Language SQL"です。 この標準SQLの改訂バージョンは不定期にリリースされています。 最新バージョンは2003年に発表されました。 最新バージョンは ISO/IEC 9075:2003、もしくは単にSQL:2003と呼ばれています。 SQL99の一つ前のバージョンは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標準はまた、数個の部品に分かれています。 それぞれ省略した名前を持ちます。 この部品に連続した番号が付いていないことに注意してください。

PostgreSQLは 1、2、および11番の部品に対応しています。

また、SQL99標準は、5つの部分に分かれています。 フレームワーク、ファンデーション、コールレベルインタフェース、永続格納モジュール、およびホスト言語バインディングです。 PostgreSQLでは、フレームワーク、ファンデーション、およびホスト言語バインディングのみをカバーしています。 コールレベルインタフェースはODBCインタフェースと似ており、永続格納モジュールはPL/pgSQLプログラミング言語と似ています。 しかし、どちらの場合も完全な準拠は特に意図されていませんし、検証されていません。

PostgreSQLはSQL:2003の主な機能のほとんどをサポートします。 完全なコアの互換性に必要な164の必須機能の内、PostgreSQLは少なくとも150個に適合します。 更に、省略可能な機能を数多くサポートします。 ここに記載する必要はないかもしれませんが、本書の執筆時点で、SQL:2003のコアに完全に適合したデータベース管理システムのバージョンはありません。

以下の二つの節では、PostgreSQLでサポートされているこれらの機能をリストし、その後にPostgreSQLでまだサポートされていないSQL:2003で定義された機能をリストしています。 これら二つのリストは大変よく似ています。 サポート対象であるとリストされている機能が些細な部分で準拠していない可能性があり、サポートされていないある機能の大部分が、実際には実装されている可能性があります。 本書の主要な部分では、動作するものとしないものについての最も正確な情報を常に伝えます。

注意: ハイフンを含む機能コードはサブ機能です。 従って、特定のサブ機能がサポートされない場合、他のサブ機能がサポートされていてもそのメイン機能はサポートされない機能としてリストされています。

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

識別子パッケージ説明コメント
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ビュー 
T322PSMSQLが呼び出す関数、プロシージャのオーバーロード 
T323 外部ルーチンに対する明示的なセキュリティ 
T351 はさまれたSQLコメント(/*...*/ コメント) 
T441 ABSおよびMOD関数 
T501 高度なEXISTS述部 
T551 デフォルト構文用の省略可能なキーワード 
T581 正規表現部分文字列関数 
T591 NULL列を含むUNIQUE制約