我是新来的。假设我有一个包含数千条记录的表(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/

10-12 17:25