【问题标题】:PostgreSQL generate results sequentiallyPostgreSQL 按顺序生成结果
【发布时间】:2021-05-21 11:03:30
【问题描述】:

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

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

create sequence an_iter
    increment by 10;

我的计划是创建一个函数

  1. 将序列增加 10
  2. 返回大于 序列的当前值(限制为 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$; 

虽然我调用了函数,但返回的结果集相同。

【问题讨论】:

  • select nextval('an_iter') into val; 可以简化为val := nextval('an_iter');(这样效率也更高)

标签: postgresql function transactions sequence plpgsql


【解决方案1】:

您是否尝试过使用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&lt;&gt;fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2017-07-10
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多