Lo que quieres es una especie de condición de parada. Que yo sepa, no existe tal cosa en SQL, al menos en el dialecto de PostgreSQL.
Lo que puede hacer es usar un procedimiento PL/PgSQL para leer filas de un cursor y devolverlas hasta que se cumpla la condición de parada. No será súper rápido, pero estará bien. Es solo un FOR
repetir una consulta con una expresión IF expression THEN exit; ELSE return next; END IF;
. No se requiere un cursor explícito porque PL/PgSQL usará uno internamente si FOR
bucle sobre una consulta.
Otra opción es crear un cursor y leer fragmentos de filas desde él en la aplicación, luego descartar parte del último fragmento una vez que se cumpla la condición de parada.
De cualquier manera, un cursor será lo que quieras.
Por cierto, una expresión de parada no sería demasiado difícil de implementar en PostgreSQL. Tendría que implementar un nuevo tipo de nodo ejecutor, pero la nueva compatibilidad con CustomScan lo haría práctico en una extensión. Entonces simplemente evaluaría una expresión para decidir si continúa o no obteniendo filas.