分布 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 个块。
我有一个存储过程如下:
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 个块。