2009-07-22 258 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隔離級別。你基本有兩個選項:

  • 具備的功能使用RAISE NOTICE飄飛向您展示多遠沿着你是
  • 使用類似從功能回到同一個數據庫DBLINK,並更新計數器表從那裏。由於這是一個完全獨立的事務,只要該事務提交,計數器就會顯示 - 您不必等待主事務(在函數調用周圍)完成。
6

PostgreSQL Transaction Isolation

在PostgreSQL,您可以要求任何四個標準的事務隔離級別。但是在內部,只有兩個不同的隔離級別,分別對應於Read Committed和Serializable級別。當您選擇Read Uncommitted級別時,您確實獲得了Read Committed,並且當您選擇Repeatable Read時,您確實獲得了Serializable,所以實際的隔離級別可能會比您選擇的更嚴格。這是SQL標準允許的:四個隔離級別只定義了哪些現象不會發生,它們沒有定義必須發生的現象。