You need to enable JavaScript to run this app. PostgreSQL实现类Python生成器逐次返回10条数据结果重复怎么解决
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL实现类Python生成器逐次返回10条数据结果重复怎么解决

问题原因
  • 过滤条件逻辑和设计思路不符:你设计的思路是返回「大于序列当前值」的记录,但代码里写的是i <= val+10,该条件会包含表最开头的10条记录,配合limit 10每次都会优先返回开头的固定数据
  • 查询缺少排序规则:PostgreSQL 执行不带ORDER BY的limit查询时,不保证返回结果的顺序,默认会优先读取存储位置靠前的记录,进一步导致每次返回的结果都是相同的前10条
修复方案

首先调整序列的起始值,保证第一次调用就能匹配从第一条开始取数的逻辑:

alter sequence an_iter restart with 0 increment by 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 order by i asc limit 10;
END
$func$;
效果验证

修改后第一次调用函数,nextval返回0,查询条件为i>0,返回i=110的10条记录;第二次调用`nextval`返回10,查询条件为`i>10`,返回i=1120的10条记录,完全符合你要的类似Python生成器的分批取数效果。

内容的提问来源于stack exchange,提问作者Rumesh Madhusanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 14:36:06