Quello che vuoi è una sorta di condizione di arresto. Per quanto ne so, non esiste una cosa del genere in SQL, almeno nel dialetto di PostgreSQL.
Quello che puoi fare è usare una procedura PL/PgSQL per leggere le righe da un cursore e restituirle finché non viene soddisfatta la condizione di arresto. Non sarà super veloce, ma andrà tutto bene. È solo un FOR
eseguire il ciclo su una query con un'espressione IF expression THEN exit; ELSE return next; END IF;
. Non è richiesto alcun cursore esplicito perché PL/PgSQL ne utilizzerà uno internamente se FOR
scorrere una query.
Un'altra opzione consiste nel creare un cursore e leggere blocchi di righe da esso nell'applicazione, quindi eliminare parte dell'ultimo blocco una volta soddisfatta la condizione di arresto.
In ogni caso, un cursore sarà quello che desideri.
A proposito, un'espressione stop non sarebbe troppo difficile da implementare in PostgreSQL. Dovresti implementare un nuovo tipo di nodo esecutore, ma il nuovo supporto CustomScan lo renderebbe pratico da fare in un'estensione. Quindi dovresti semplicemente valutare un'espressione per decidere se continuare o meno a recuperare le righe.