Wat je wilt is een soort stop-conditie. Voor zover ik weet bestaat zoiets niet in SQL, althans niet in het dialect van PostgreSQL.
Wat u kunt doen, is een PL/PgSQL-procedure gebruiken om rijen van een cursor te lezen en deze terug te sturen totdat aan de stopvoorwaarde is voldaan. Het gaat niet super snel, maar het komt wel goed. Het is gewoon een FOR
loop over een query met een IF expression THEN exit; ELSE return next; END IF;
. Er is geen expliciete cursor vereist omdat PL/PgSQL er een intern zal gebruiken als u FOR
loop over een zoekopdracht.
Een andere optie is om een cursor te maken en er stukken rijen uit te lezen in de toepassing, en vervolgens een deel van het laatste stuk weg te gooien zodra aan de stopvoorwaarde is voldaan.
Hoe dan ook, een cursor zal zijn wat je wilt.
Een stop-expressie zou trouwens niet zo moeilijk te implementeren zijn in PostgreSQL. U zou een nieuw type executor-knooppunt moeten implementeren, maar de nieuwe CustomScan-ondersteuning zou dat praktisch maken om te doen in een extensie. Dan evalueer je een uitdrukking om te beslissen of je rijen wilt ophalen of niet.