0

私のデータベースにはさまざまな一時テーブルがありますが、削除したくありません。これは一時テーブルのデフォルトの動作であり、各トランザクションの後にこれらのテーブルを削除します。

このようなドロップ オーバーヘッドを削減するために、次の一時テーブルの定義を記述しました。

CREATE TEMPORARY TABLE TEMPTABLEINPOSTGRESDB (LIKE PERMTABLE INCLUDING INDEXES) ON COMMIT DELETE;

そのようなテーブルの動作を教えていただけますか? DBは毎回テーブルを削除する代わりにテーブルをクリアしますか?

以下の機能を実現するための代替ソリューションはありますか?

アプリケーションは各セッションでいくつかのレコードを追加しており、アプリケーションはセッションが完了したらデータを削除する必要があります。セッションの途中で追加されたデータは、アプリケーションの他のスレッドから見えないようにする必要があります。

編集:トランザクションではなくセッションを読み取ります。

4

1 に答える 1

1

デフォルトの動作は、トランザクションではなくセッションの最後に一時テーブルを削除することです。トランザクションの終了時にそれを保持するために何もする必要はありません。使用しないでくださいon commit

CREATE TEMPORARY TABLE TEMPTABLEINPOSTGRESDB (LIKE PERMTABLE INCLUDING INDEXES)

またはon commit preserve rows、デフォルトの which を使用します。

使用する場合on commit delete、テーブルはトランケートされ、トランザクションの終了時に削除されませんが、セッションの終了時に削除されます。

セッション間でテーブルを保持する必要がある場合は、永続的なテーブルが必要です。データがセッションに固有のものである場合は、セッション ID を使用します。またはKISSして、各セッションで一時テーブルを作成して削除するだけです。

http://www.postgresql.org/docs/current/static/sql-createtable.html

于 2013-07-23T12:18:20.570 に答える