To, co chcete, je druh zastavení. Pokud je mi známo, v SQL nic takového není, alespoň dialekt PostgreSQL.
Co můžete udělat, je použít proceduru PL/PgSQL ke čtení řádků z kurzoru a jejich vrácení, dokud není splněna podmínka zastavení. Nebude to super rychlé, ale bude to v pořádku. Je to jen FOR
smyčka přes dotaz s výrazem IF expression THEN exit; ELSE return next; END IF;
. Není vyžadován žádný explicitní kurzor, protože PL/PgSQL jej použije interně, pokud FOR
smyčka přes dotaz.
Další možností je vytvořit kurzor a číst z něj v aplikaci bloky řádků a poté část posledního bloku zahodit, jakmile je splněna podmínka zastavení.
V každém případě bude kurzor přesně takový, jaký chcete.
Mimochodem, stop výraz by ve skutečnosti nebylo příliš těžké implementovat v PostgreSQL. Museli byste implementovat nový typ uzlu spouštěče, ale díky nové podpoře CustomScan by to bylo praktické v rozšíření. Pak byste jen vyhodnotili výraz a rozhodli se, zda pokračovat v načítání řádků.