Привязки DBD::Pg
PostgreSQL для Perl всегда будут извлекать весь набор результатов вашего запроса.Таким образом, если вы используете простое подготовительное выполнение для обхода большой таблицы, вы получите всю таблицу в памяти, просто запустив $sth->execute()
.Подготовленные операторы и вызовы типа fetch_row
не помогают.
При работе с БОЛЬШОЙ таблицей произойдет сбой следующего.
use DBI;
my $dbh = DBI->connect("dbi:Pg:dbname=big_db","user","password",{
AutoCommit => 0,
ReadOnly => 1,
PrintError => 1,
RaiseError => 1,
});
my $sth = $dbh->prepare('SELECT * FROM big_table');
$sth->execute(); #prepare to run out of memory here
while (my $row = $sth->fetchrow_hashref('NAME_lc')){
# do something with the $row hash
}
$dbh->disconnect();