Lección 9 de 12 · Lectura y práctica
Paginacion: limit, cursor y orden estable
Paginacion Listas largas necesitan paginacion. Aprende un enfoque simple y estable para APIs. Conceptos clave limit + cursor orden estable por created_at + id evitar OFFSET en tablas grandes Ejemplo Cursor tipico: created_at + id.
Del concepto a la práctica
Taller de esta lección
Un cursor útil representa la última posición de un orden total. Con created_at e id, dos filas con la misma fecha siguen teniendo desempate determinista. La siguiente consulta debe pedir registros posteriores a esa pareja, no saltar por un offset frágil.
Ejemplo resuelto
Registros ordenados: (10:00,id1), (10:00,id2), (10:05,id3). Con limit=2, la primera página contiene id1 e id2 y su cursor es (10:00,id2). La siguiente empieza después de esa pareja y devuelve id3.
Usa fechas completas2026-01-01T10:00:00Z para id1/id2 y2026-01-01T10:05:00Z para id3. Con un cursor válido (fecha,id2), la consulta es:
SELECT id,created_at FROM courses
WHERE (created_at,id) > ($1::timestamptz,$2::bigint)
ORDER BY created_at ASC,id ASC
LIMIT $3;Valida limit como entero entre1 y100 y los dos campos del cursor antes de parametrizar. Para saber si existe otra página pide limit+1, devuelve como máximo limit y emite cursor solo cuando sobró una fila. Un orden estable no da una instantánea entre solicitudes si cambian filas; declara la política de modificaciones concurrentes y usa claves estables.
Pruébalo
Inserta exactamente esos tres registros.
Ordena por
created_at ASC, id ASC.Solicita límite 2 y usa el último par como cursor siguiente.
Error frecuente: ordenar solo por fecha. Corrige añadiendo un desempate único, normalmente el identificador.
Ejercicio: repite la segunda solicitud con el mismo cursor.
Comprueba tu resultado
id3 aparece una vez; la unión de ambas páginas contiene id1, id2 e id3, sin duplicados ni omisiones. Si no hay más filas, devuelve un cursor siguiente nulo.

Mapa de prácticaEl navegador envía una solicitud a la API. El servidor valida la operación y consulta los datos; después devuelve una respuesta que el navegador puede mostrar. La base de datos se comunica con el servidor y no directamente con el navegador.
Ver la infografía en tamaño completo ↗Paginacion
Listas largas necesitan paginacion. Aprende un enfoque simple y estable para APIs.
Conceptos clave
- limit + cursor
- orden estable por created_at + id
- evitar OFFSET en tablas grandes
Ejemplo
Cursor tipico: created_at + id para no perder ni duplicar items.
Ejercicio
- Implementa GET /items?limit=20&cursor=...
- Asegura orden estable y repetible.
Checklist de mastery
- Puedo paginar sin OFFSET.
- Mi API no duplica items entre paginas.
Sigue con Node.js y APIs con Express
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.