2012-05-09 3 views
0

Я использую Npsql с PostgreSQL. Я хочу видеть незафиксированные изменения одной транзакции в другой.Npgsql с PostgreSQL: не удается увидеть незафиксированные изменения с помощью UNCOMMITTED READ

Это, как я создаю мою связь и сделки:

// 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 SETACTION 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

Удивительно для меня лично, потому что я работал с DB2, где READ UNCOMMITTED был допустимым уровнем изоляции. И это также определено в стандарте SQL. – machinery