sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL一時テーブル

    Postgresでは、一時テーブルのデフォルトの動作は自動的に削除されず、データはコミット時に保持されることに注意してください。 ON COMMITを参照してください 。

    ただし、一時テーブルはデータベースセッションの終了時に削除されます:

    一時テーブルは、セッションの終了時に自動的に削除されるか、オプションで現在のトランザクションの終了時に削除されます。

    考慮しなければならない考慮事項は複数あります:

    • 明示的にDROPしたい場合 トランザクションの最後に一時テーブルを作成するには、CREATE TEMPORARY TABLE ... ON COMMIT DROPを使用して作成します。 構文。
    • 接続プールが存在する場合 、データベースセッションは複数のクライアントセッションにまたがることがあります。 CREATEでの衝突を避けるため 、一時テーブルを削除する必要があります-プールに接続を返す前に(たとえば、トランザクション内ですべてを実行し、ON COMMIT DROPを使用して) 作成構文)、または 必要に応じて(CREATE TEMPORARY TABLEの前に 対応するDROP TABLE IF EXISTSを含むステートメント 、これには、外部トランザクションでも機能するという利点があります。接続が自動コミットモードで使用されている場合。)
    • 一時テーブルが使用されている間、ディスクにオーバーフローする前に、どれだけのテーブルがメモリに収まりますか? temp_buffersを参照してください postgresql.confのオプション
    • 一時テーブルを頻繁に使用するときに気にする必要があることは他にありますか?カタログからデッドタプルをクリーンアップするために、一時テーブルを削除した後はバキュームを使用することをお勧めします。デフォルト設定(auto_vacuum)を使用すると、Postgresは約3分ごとに自動的にバキュームします。 。

    また、質問とは関係ありません(ただし、プロジェクトに関係している可能性があります)。に一時テーブルに対してクエリを実行する必要がある場合は、注意してください。 値を入力したら、適切なインデックスを作成してANALYZEを発行することをお勧めします。 問題の一時テーブルで 挿入が完了しました。デフォルトでは、コストベースのオプティマイザは、新しく作成された一時テーブルに最大1000行があると想定します。これにより、一時テーブルに実際に数百万行が含まれている場合、パフォーマンスが低下する可能性があります。



    1. 64ビットアプリケーションをClarionTopSpeedに接続する

    2. ORACLEJOINを使用してLEFTOUTERJOINまたはRIGHTOUTERJOINを見つける方法(+)

    3. log-slow-queriesのMySQLLongQuery時間値を変更または設定する

    4. MariaDBでデータベースのサイズを取得する