如何从PostgreSQL中的表中删除spedific索引中的10行

时间:2018-03-27 12:22:41

标签: postgresql

我是PostgreSQL的新手。假设我有一个包含数千条记录的表(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使用率很高。除了光标你还有什么建议我吗? 这是一个很好的方法吗?

我需要最快的方法,因为在最短的时间内删除对我很重要。

1 个答案:

答案 0 :(得分:2)

这看起来很精致,为什么不做呢

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行。