如何使PDO(pdo_pgsql)懒惰地获取行

时间:2016-07-04 21:39:06

标签: php postgresql pdo

使用以下代码即使我获取单行 - 下载整个数据集(需要几秒钟):

$query = 'SELECT * FROM xxx WHERE id > :position ORDER BY id';
$stmt = $db->prepare($query);

$stmt->execute([
    ':position' => $position,
]);

while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
    break;
}

我试图在PDO中找到一个选项,可以根据需要(或通过合理的批次)获取行,但是没有这样做,至少我在PDO文档中找不到它。

给定查询的Postgresql能够根据0.28msEXPLAIN ANALYZE中的第一行提供服务。

我的目标是尽可能快地开始处理行,即使进一步批量的行会带来一些网络开销。

我如何确定它获取所有行:

  1. 间接:在第一行之后break需要相同的时间或迭代整个数据集
  2. 我使用tcpdump捕获了流量并检查它是否获取了所有行。
  3. 所以,问题是:是否有可能在需求模式下逐行(或一些合理的小批量)获取PDO

1 个答案:

答案 0 :(得分:3)

我找到了答案:

$stmt = $db->prepare($query, [\PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL]);

因此必须使用\PDO::CURSOR_SCROLL选项

创建语句

参考文献: