有没有办法从PHP执行针对PostgreSQL的无缓冲查询,或者至少限制驱动程序使用的本地缓冲区的大小?
答案 0 :(得分:2)
就我所知,从我看到这个时间开始,在PHP上没有使用pgsql驱动程序的无缓冲查询。但是以下代码可以帮助您解决这个问题:
$curSql = "DECLARE cursor1 CURSOR FOR SELECT * FROM big_table";
$con = new PDO("pgsql:host=whatever dbname=whatever", "user", "pass");
$con->beginTransaction(); // cursors require a transaction.
$stmt = $con->prepare($curSql);
$stmt->execute();
$innerStatement = $con->prepare("FETCH 1 FROM cursor1");
while($innerStatement->execute() && $row = $innerStatement->fetch(PDO::FETCH_ASSOC)) {
echo $row['field'];
}
来源:http://codepoets.co.uk/2014/postgresql-unbuffered-queries/#more-936
答案 1 :(得分:0)
嗯......我发现了一个PHP类belonging to the Flourish (un-)framework,它似乎有一个可以满足你需要的函数。
答案 2 :(得分:0)
不幸的是,PHP pgsql扩展或pdo_pgsql扩展没有无缓冲模式。 Flourish为fDatabase提供了一个unbufferedQuery()方法,但对于PostgreSQL数据库,它使用了扩展的常规查询功能。