sirve que para fetch_obj php postgresql pdo

php - para - Cómo hacer que PDO(pdo_pgsql) busque filas de forma perezosa



fetchall(pdo::fetch_obj) (1)

Con el siguiente código, aunque busco una sola fila, se descarga todo el conjunto de datos (lo que demora unos segundos):

$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; }

Traté de encontrar una opción en PDO que permitiera obtener filas según demanda (o por lotes razonables), pero no lo hice, al menos no pude encontrarla en la documentación de PDO.

Postgresql para la consulta dada puede servir a la primera fila en 0.28ms según el EXPLAIN ANALYZE .

Y mi objetivo es comenzar a procesar las filas lo más rápido posible, incluso si vienen más lotes de filas con una sobrecarga de red.

Cómo determiné que obtiene todas las filas:

  1. Indirectamente: toma el mismo tiempo para break después de la primera fila o para iterar sobre el conjunto de datos completo
  2. Capturé el tráfico con tcpdump y verifiqué que recupera todas las filas.

Entonces, la pregunta es: ¿es posible hacer que PDO busque en un modo fila por fila (o algunos lotes pequeños razonables) en demanda?


Encontré la respuesta:

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

Por lo tanto, la sentencia debe crearse con una opción /PDO::CURSOR_SCROLL

Referencias