PostgreSQL 顺序生成结果

PostgreSQL generate results sequentially

我想像 python 生成器一样按顺序给出来自 PostgreSQL 数据库的结果。 每次调用函数 get_data 时,我想从行中 return 新的 10 行。

我定义了一个名为 an_iter 的序列,它增加了 10:

create sequence an_iter
    increment by 10;

我的计划是创建一个函数

  1. 将序列增加 10
  2. return 大于的行 序列的当前值(限制为 10)

我的函数定义:

CREATE OR REPLACE FUNCTION public.get_data()
    RETURNS SETOF ppdb
    LANGUAGE plpgsql AS
$func$
declare
    val integer := 0;
BEGIN

    select nextval('an_iter') into val;
    Return Query SELECT * from ppdb where i<= val+10 limit 10;
END
$func$; 

尽管我调用了该函数,但相同的结果集是 returned.

您尝试过使用 BETWEEN 吗?这样做你可以摆脱 LIMIT 10,例如

CREATE OR REPLACE FUNCTION public.get_data()
    RETURNS SETOF ppdb
    LANGUAGE plpgsql AS
$func$
declare
    val integer := 0;
BEGIN

    SELECT nextval('an_iter') INTO val;
    RETURN QUERY SELECT * FROM ppdb 
                 WHERE i BETWEEN val AND val+10;
END
$func$; 

演示:db<>fiddle