我是新来的。假设我有一个包含数千条记录的表(tbl_box),并且它正在增长,我想从一个特定索引中删除10行(例如,我想从第50行到第59行删除10条记录),我编写了一个函数
您可以看到以下内容:
- Function: public.signalreject()
-- DROP FUNCTION public.signalreject();
CREATE OR REPLACE FUNCTION public.signalreject()
RETURNS void AS
$BODY$
DECLARE
rec RECORD;
cur CURSOR
FOR SELECT barcode,id
FROM tbl_box where gf is null order by id desc;
counter int ;
BEGIN
-- Open the cursor
OPEN cur;
counter:=0;
LOOP
-- fetch row into the rec
FETCH cur INTO rec;
-- exit when no more row to fetch
EXIT WHEN NOT FOUND;
counter :=counter+1;
-- build the output
IF counter >= 50 and counter < 60 THEN
delete from tbl_box where barcode = rec.barcode;
END IF;
END LOOP;
-- Close the cursor
CLOSE cur;
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.signalreject()
OWNER TO Morteza;
我发现光标消耗内存,CPU使用率很高。除了光标你们还建议我做什么?
这是个好办法吗?
我需要最快的方法,因为在最短的时间内删除对我来说很重要。
最佳答案
这看起来很复杂,为什么不
delete from tbl_box
where barcode in
( select barcode
from tbl_box
where gf is null
order by id desc limit 10 offset 49
);
假设
barcode
是唯一的。我们跳过49行,开始从第50行删除10行。关于postgresql - 如何从PostgreSQL的表中的特定索引中删除10行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49512741/