分布 PostgreSQL 游标中的记录数

Distributing the number of records in PostgreSQL cursors

我有一个存储过程如下:

CREATE OR REPLACE FUNCTION DELETE_REDUNDANT_RECORDS_STORED_PROCEDURE
RETURNS void AS
$func$
DECLARE
    interval_time            BIGINT DEFAULT 0;
    min_time                 BIGINT DEFAULT 0;
    max_time                 BIGINT DEFAULT 0;
    rec_old                  RECORD;
    rec_new                  RECORD;
    rec_start                RECORD;


    cursor_file CURSOR FOR
        SELECT distinct filename,systemuid FROM BOOKMARK.MONITORING_TESTING;

    cursor_data CURSOR FOR
        SELECT * FROM BOOKMARK.MONITORING_TESTING WHERE filename = v_filename AND systemuid=v_systemuid ORDER BY mindatetime, maxdatetime;

BEGIN
    -- Use cursors for iteration
    -- Business logic to delete and update the table records based on certain conditions
END;
$func$
LANGUAGE plpgsql;

不同的查询 returns 大约有一百万条记录,用于在另一个游标上进行迭代。

我想将这百万条记录分配到可配置的数据块中,例如每条 20 万条记录,直到读取所有记录。 我怎样才能在我的存储过程中实现这样的功能?

您可以向游标的 SELECT 列表添加 window 函数调用:

(row_number() OVER ()) / 10000 AS chunk

这将添加一个数字,您可以使用该数字将结果分成 10000 个块。