在我的 Postgres 9.2 数据库中,我有以下内容SELECT
,将由 PL/pgSQL 函数使用:
SELECT
id
FROM
tablea
WHERE
migrated = false;
我想每次获取 2000 条记录并执行以下操作:
CREATE or REPLACE FUNCTION migrate_data()
RETURNS integer AS
$$
declare
row record;
BEGIN
FOR row IN EXECUTE '
SELECT
id
FROM
tablea
WHERE
migrated = false
'
LOOP
INSERT INTO tableb (id)
VALUES (row.id);
UPDATE tablea a SET migrated = yes WHERE a.id = row.id;
END LOOP;
RETURN num_rows; -- I want it to return the number of processed rows
END
$$ language 'plpgsql';
如何告诉函数每次调用处理 2000 条记录?它必须从下一次呼叫时离开的地方开始。
例子:
select migrate_data(); -- id 0 to id 2000
select migrate_data(); -- id 2001 to id 4000
select migrate_data(); -- id 4001 to id 6000
select migrate_data(); -- id 6001 to id 8000
等等。
使用游标会更简单(更快):
关于
declare
关于
fetch
您可以使用数据修改 CTE运行单个 SQL 命令。
GET DIAGNOSTICS
然后在 plpgsql 函数中获取行数:有关的:
您可能只使用没有函数包装器的 SQL 语句。可能作为准备好的声明。