У меня большая таблица (2 000 000 строк), и я хотел бы распечатать каждую запись на экране по одной без загрузки всей таблицы в память.
//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 и больших таблиц. В настоящее время Версия 1 Npgsql получает все данные из таблицы перед возвратом. Если в таких случаях у вас плохая производительность, вам может потребоваться использовать серверный курсор для пролистывания строк. Для этого вы можете использовать код, подобный следующему: