2012-05-09 45 views
0

我正在使用NPSQL與PostgreSQL。我希望看到另一個事務中的一個事務的未提交更改。Npgsql與PostgreSQL:無法看到未提交的更改與未提交的閱讀

這是我創造我的連接和事務:

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

對我個人而言,這是令人驚訝的,因爲我曾經與DB2一起工作,其中READ UNCOMMITTED是一個有效的隔離級別。它也在SQL標準中定義。 – machinery