2012-05-09 8 views
0

PostgreSQLでNpsqlを使用しています。私は、あるトランザクションのコミットされていない変更を別のトランザクションに見たいと思っています。Npgsql with PostgreSQL:コミットされていない変更がUNCOMMITTED READで表示されない

これは私が私の接続とトランザクションを作成する方法である:

1つのスレッドで
// create connection 
m_Connection = new NpgsqlConnection(connectionString); 
m_Connection.Open(); 

//create transaction 
m_Transaction = m_Connection.BeginTransaction(IsolationLevel.ReadUncommitted); 

私はそうのような行を挿入:

NpgsqlCommand command = CreateCommand("INSERT INTO TABLEA ....", parameters, commandTimeout) 
command.ExecuteNonQuery(); 

とプロセスのトランザクションをコミットまたはロールバックせずに何かを。別のスレッドで

私はそうのような行をお読みください。

NpgsqlCommand command = CreateCommand("SELECT COUNT(*) FROM TABLEA", parameters, commandTimeout); 
command.ExecuteScalar(); 

何とか、私は最初のINSERTの結果が表示されません。 pgAdminに挿入された結果が表示されません(SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDを実行した後でも)。

私は間違っていますか?どんな助けもありがとう。

答えて

7

PostgreSQLはコミットされていない読み取りをサポートしていません。

コミットされていない他のトランザクションからの変更は、決して見ることができません。

+0

ワウ。これは私にとって驚きです。答えをありがとう! :)興味深い詳細はこちら:http://www.postgresql.org/docs/8.1/static/sql-set-transaction.html( "PostgreSQL READ UNCOMMITTEDではREAD COMMITTEDとして扱われ、REPEATABLE READは次のように扱われます。 SERIALIZABLE ") – machinery

+0

なぜそれは驚くべきことでしょうか? READ UNCOMMITTEDは本当に意味をなさない(少なくとも私にとっては) –

+0

READ UNCOMMITTEDが有効な分離レベルであったDB2を使用していたので、個人的には私には驚くべきことです。また、SQL標準でも定義されています。 – machinery