6

新しい行を挿入する必要がある長時間実行関数があります。この機能の進行状況を確認するにはどうすればよいですか?

ダーティリードが機能すると思っていたので、http://www.postgresql.org/docs/8.4/interactive/sql-set-transaction.htmlを読んで、次のコードを考え出し、新しいセッションで実行しました。


SET SESSION CHARACTERISTICS AS SERIALIZABLE;

SELECT * FROM MyTable;

Postgresで構文エラーが発生します。私は何が間違っているのですか?正しく実行すると、その長い関数がまだ実行されている間に挿入されたレコードが表示されますか?

ありがとう

4

2 に答える 2

12

READ UNCOMMITTEDPostgreSQLは、関数の外部、別名分離レベルからこれを確認する方法を実装していません。基本的な2つのオプションは次のとおりです。

  • 関数を時々使用しRAISE NOTICEて、あなたがどれだけ進んでいるかを示します
  • 関数から同じデータベースに戻るdblinkのようなものを使用し、そこからカウンターテーブルを更新します。これは完全に別個のトランザクションであるため、そのトランザクションがコミットされるとすぐにカウンターが表示されます。メインのトランザクション(関数呼び出しの周囲)が終了するのを待つ必要はありません。
于 2009-07-22T22:18:03.813 に答える
7

PostgreSQLトランザクション分離

PostgreSQLでは、4つの標準トランザクション分離レベルのいずれかを要求できます。ただし、内部的には、ReadCommittedとSerializableのレベルに対応する2つの異なる分離レベルしかありません。レベルReadUncommittedを選択すると、実際にRead Committedが取得され、Repeatable Readを選択すると、実際にSerializableが取得されるため、実際の分離レベルは、選択したレベルよりも厳しい場合があります。これはSQL標準で許可されています。4つの分離レベルは、発生してはならない現象を定義するだけで、発生してはならない現象を定義していません。

于 2010-05-25T08:36:20.553 に答える