To, czego chcesz, to rodzaj warunku zatrzymania. O ile mi wiadomo, nie ma czegoś takiego w SQL, przynajmniej w dialekcie PostgreSQL.
To, co możesz zrobić, to użyć procedury PL/PgSQL do odczytania wierszy z kursora i zwrócenia ich do momentu spełnienia warunku zatrzymania. Nie będzie super szybko, ale będzie dobrze. To tylko FOR
zapętlić zapytanie z wyrażeniem IF expression THEN exit; ELSE return next; END IF;
. Nie jest wymagany żaden jawny kursor, ponieważ PL/PgSQL użyje go wewnętrznie, jeśli FOR
zapętlić zapytanie.
Inną opcją jest utworzenie kursora i odczytanie z niego fragmentów wierszy w aplikacji, a następnie odrzucenie części ostatniego fragmentu po spełnieniu warunku zatrzymania.
Tak czy inaczej, kursor będzie tym, czego chcesz.
Nawiasem mówiąc, wyrażenie stop nie byłoby zbyt trudne do zaimplementowania w PostgreSQL. Musiałbyś zaimplementować nowy typ węzła wykonawczego, ale nowa obsługa CustomScan sprawi, że będzie to praktyczne w rozszerzeniu. Następnie po prostu oceniasz wyrażenie, aby zdecydować, czy kontynuować pobieranie wierszy.