我有一個大的表(2,000,000行),我想每次打印每個記錄到屏幕上,一次不加載整個表到內存中。NPGSQL:來自Postgres查詢的流式結果?
//pseudo code
var cmd = new NpgSQLCommand();
cmd.CommandText = "SELECT * FROM mytable;"
IReader reader = cmd.ExecuteReader(); //blocks until the entire set is returned
while(reader.Read()) //ideally each call to read loads more results from the db.
{
// print record name
}
所以在代碼注意到上述情況,的ExecuteReader()不繼續,直到整個集被加載到存儲器中。如何更改此行爲,以便結果流式傳輸?
謝謝
ETA:雖然這看起來像功課,事實並非如此。這只是一種簡單的方法來描述一個問題,該問題涉及使用單個查詢讀取整個表,但一次處理結果。
ETA X2:
從Npgsql的 警告:調用的ExecuteReader和大表時是一個已知的問題。
當前
Npgsql的第1版在返回之前從表中獲取所有數據。如果在這種情況下性能不佳,則可能需要使用服務器光標來遍歷行。對於這一點,你可以使用如下代碼:
這不是Postgres的一個已知問題,它是Npgsql的一個已知的和固定的問題。對於原始的querant來說,這是個不錯的選擇,因爲他們不想從Npgsql1移動過來,但是任何在搜索過程中遇到同樣問題的人都應該注意到,它並不支持Npgsql2.0 (除了有一定的向後兼容性功能集)一段時間後,升級應該比服務器光標具有更好的性能。 – 2010-08-09 17:37:38
你是對的喬恩。它*是一個已知問題,並且*仍然是Npgsql 1.0的一個問題。 – Alan 2010-08-09 18:25:40