Det, du ønsker, er en slags stop-tilstand. Så vidt jeg ved er der ikke sådan noget i SQL, i hvert fald PostgreSQL's dialekt.
Hvad du kan gøre er at bruge en PL/PgSQL-procedure til at læse rækker fra en markør og returnere dem, indtil stopbetingelsen er opfyldt. Det vil ikke være super hurtigt, men det vil være i orden. Det er bare en FOR
loop over en forespørgsel med et IF expression THEN exit; ELSE return next; END IF;
. Der kræves ingen eksplicit markør, fordi PL/PgSQL vil bruge en internt, hvis du FOR
sløjfe over en forespørgsel.
En anden mulighed er at oprette en markør og læse bidder af rækker fra den i applikationen og derefter kassere en del af den sidste chunk, når stopbetingelsen er opfyldt.
Uanset hvad, vil en markør være, hvad du vil have.
Et stop-udtryk ville i øvrigt ikke være for svært at implementere i PostgreSQL. Du bliver nødt til at implementere en ny executor node type, men den nye CustomScan support ville gøre det praktisk at gøre i en udvidelse. Så ville du bare evaluere et udtryk for at beslutte, om du vil fortsætte med at hente rækker eller ej.