O que você quer é uma espécie de condição de parada. Tanto quanto sei, não existe tal coisa no SQL, pelo menos no dialeto do PostgreSQL.
O que você pode fazer é usar um procedimento PL/PgSQL para ler as linhas de um cursor e devolvê-las até que a condição de parada seja atendida. Não vai ser super rápido, mas vai ficar tudo bem. É apenas um
FOR
loop sobre uma consulta com uma expressão IF expression THEN exit; ELSE return next; END IF;
. Nenhum cursor explícito é necessário porque o PL/PgSQL usará um internamente se você FOR
loop sobre uma consulta. Outra opção é criar um cursor e ler trechos de linhas dele no aplicativo e, em seguida, descartar parte do último trecho assim que a condição de parada for atendida.
De qualquer forma, um cursor será o que você deseja.
A propósito, uma expressão de parada não seria muito difícil de implementar no PostgreSQL. Você teria que implementar um novo tipo de nó executor, mas o novo suporte CustomScan tornaria isso prático em uma extensão. Então você apenas avaliaria uma expressão para decidir se deve ou não continuar buscando linhas.