PostgreSQL 顺序生成结果
PostgreSQL generate results sequentially
我想像 python 生成器一样按顺序给出来自 PostgreSQL 数据库的结果。
每次调用函数 get_data 时,我想从行中 return 新的 10 行。
我定义了一个名为 an_iter
的序列,它增加了 10:
create sequence an_iter
increment by 10;
我的计划是创建一个函数
- 将序列增加 10
- 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
我想像 python 生成器一样按顺序给出来自 PostgreSQL 数据库的结果。 每次调用函数 get_data 时,我想从行中 return 新的 10 行。
我定义了一个名为 an_iter
的序列,它增加了 10:
create sequence an_iter
increment by 10;
我的计划是创建一个函数
- 将序列增加 10
- 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