2009-07-22 20 views
5

私は新しい行を挿入するはずの長い実行関数を持っています。この機能の進捗状況を確認するにはどうすればよいですか?Postgresでのダーティリード

私は汚い考えていたが働くだろう読み込むので、私はhttp://www.postgresql.org/docs/8.4/interactive/sql-set-transaction.htmlを読み、次のコードを思い付いた、新しいセッションでそれを実行しました:


SET SESSION CHARACTERISTICS AS SERIALIZABLE; 

SELECT * FROM MyTable; 

Postgresは私に、構文エラーになります。私は間違って何をしていますか?私がそれを正しければ、その長い機能がまだ実行されている間に、挿入されたレコードを見ますか?

おかげ

答えて

10

PostgreSQLはあなたが、機能外部から別名READ UNCOMMITTED分離レベルをこれを確認するための方法を実装していません。あなたの基本的な2つのオプションは以下のとおりです。

  • はどこまであなたが戻って同じデータベースへの関数からのデータベース・リンクのような
  • 使用何かあるに沿ってあなたを見ると、カウンターテーブルを更新するために、すべての今して機能の使用RAISE NOTICEを持っていますそこから。それは完全に別個のトランザクションなので、トランザクションがコミットするとすぐにカウンタが表示されます。メイントランザクション(関数呼び出しの前後)が終了するのを待つ必要はありません。 PostgreSQLの
6

PostgreSQL Transaction Isolation

、あなたは4つの標準トランザクション分離レベルのいずれかを要求することができます。しかし、内部的には2つの明確な隔離レベルがあり、これはコミットされたリードとシリアライズ可能なレベルに対応しています。 Read Uncommittedレベルを選択すると、実際にRead Committedが取得され、Repeatable Readを選択すると、実際にシリアライズ可能になるので、実際の分離レベルは選択したレベルよりも厳しくなる可能性があります。これはSQL標準で許可されています.4つの分離レベルは、どのような現象が起こらなければならないかだけを定義し、どの現象が起こるかを定義しません。