PolarDB for PostgreSQL (Compatible with Oracle) は、グローバル一時テーブルとネイティブPostgreSQLローカル一時テーブルをサポートします。
構文
CREATE GLOBAL TEMPORARY | TEMP TABLEテーブル名
{column-definition [ , column-definition ] *}
[COMMIT {削除 | 予約} 行] - ON COMMIT DELETE ROWS句は、現在のトランザクションがコミットされた後に一時テーブルからデータを削除するために使用されます。
- ON COMMIT PRESERVE ROWS句は、現在のトランザクションがコミットされた後にグローバル一時テーブルにデータを保持するために使用されます。
- ON COMMIT DROP句はサポートされていません。
- ON COMMIT句を使用しない場合は、デフォルトでON COMMIT DELETE ROWS句が使用されます。
説明
- すべてのデータベースセッションは、グローバル一時テーブルのテーブル定義を共有します。 セッションがグローバル一時テーブルを作成するとき、他のセッションもこのグローバル一時テーブルを使用できます。
- グローバル一時テーブルに格納されたデータは、データを生成するセッションに対してプライベートである。 各セッションは、グローバル一时テーブル内の独自のデータにのみアクセスできます。
- セッションが終了すると、セッションが使用するグローバル一時テーブルのデータと基になるストレージが消去されます。
- グローバル一時テーブルを他のテーブルに結合したり、グローバル一時テーブルにインデックスを作成したり、グローバル一時テーブルのインデックスをスキャンしたりできます。 現在のバージョンはBツリーインデックスのみをサポートしています。 グローバル一時テーブルのテーブルレベルおよび列レベルの統計は、統計で使用されるデータを生成するセッションにもプライベートです。 これにより、グローバル一時テーブル内のクエリのクエリプランが最適化されます。
- グローバルな一時テーブルは、手動による真空をサポートし、操作を分析して、ジャンクデータをクリアし、統計を収集します。
例
global temp table gtt1 (int primary key, b text) を作成します。# gtt1という名前のグローバル一時テーブルを作成します。 デフォルトでは、グローバル一時テーブルはON COMMIT DELETE ROWSをサポートします。 ON COMMIT DELETE ROWSを使用して、現在のトランザクションがコミットされた後にグローバル一時テーブルからすべてのデータを削除できます。
コミット削除行にグローバル一時テーブルgtt2 (int primary key, b text) を作成します。# gtt2という名前のグローバル一時テーブルを作成し、on commit delete rowsを指定して、現在のトランザクションがコミットされた後にグローバル一時テーブルからすべてのデータを削除します。
コミットPRESERVE行にグローバル一時テーブルgtt3 (int primary key, b text) を作成します。# gtt3という名前のグローバル一時テーブルを作成し、on commit PRESERVE rowsを指定して、現在のトランザクションがコミットされた後にグローバル一時テーブルからすべてのデータを保持します。 操作
PolarDB for Oracleは、グローバル一時テーブルに使用できる関数のグループを提供します。
- polar_gtt_attached_pidは、グローバル一時テーブルを使用しているセッションを表示するために使用されます。 この機能は、運用およびメンテナンス中に他の機能と組み合わせることができます。
- polar_gtt_att_statisticは、グローバル一時テーブルの列レベルの統計を表示するために使用されます。
- polar_gtt_relstatsは、グローバル一時テーブルのテーブルレベルの統計を表示するために使用されます。
これらの機能はプラグインとして機能します。 これらの関数を使用する前に、プラグインを作成する必要があります。
拡張子polar_gttを作成します。グローバル一時テーブルを削除するには、グローバル一時テーブルが現在のセッションでのみ使用されていることを確認する必要があります。
以下の手順を実行します。
- polar_gtt_attached_pidを使用して、グローバル一時テーブルを使用しているセッションを照会します。
- pg_backend_pid() を使用して、現在のセッションのプロセスID (pid) を取得します。
- pg_terminate_backend(pid) を使用して、現在以外のセッションを終了します。
- DROP TABLEステートメントを実行して、グローバル一時テーブルを削除します。