Това, което искате, е нещо като стоп-условие. Доколкото ми е известно, няма такова нещо в SQL, поне в диалекта на PostgreSQL.
Това, което можете да направите, е да използвате PL/PgSQL процедура, за да прочетете редове от курсор и да ги върнете, докато не бъде изпълнено условието за спиране. Няма да е супер бързо, но ще е наред. Това е просто FOR
цикъл върху заявка с израз IF expression THEN exit; ELSE return next; END IF;
. Не се изисква явен курсор, защото PL/PgSQL ще използва такъв вътрешно, ако FOR
преминете през заявка.
Друг вариант е да създадете курсор и да прочетете части от редове от него в приложението, след което да изхвърлите част от последната част, след като условието за спиране е изпълнено.
И в двата случая курсорът ще бъде това, което искате.
Между другото, изразът за спиране всъщност не би бил твърде труден за прилагане в PostgreSQL. Ще трябва да внедрите нов тип изпълнителен възел, но новата поддръжка на CustomScan би направила това практично да се направи в разширение. След това просто ще оцените израз, за да решите дали да продължите извличането на редове, или не.