记录旧的尚未分配

时间:2017-11-01 12:35:42

标签: postgresql

我编写了这个触发器函数来计算新插入行的数量并将其存储在表中:

CREATE OR REPLACE FUNCTION public.count_inserted()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF 
AS $BODY$

DECLARE 
n int;
BEGIN 
    n = 0;
    IF(TG_OP = 'INSERT') THEN  
        IF (NEW.date = OLD.date) THEN
            update ouf set crt = crt+1 where date = new.date;
            return null;
         ELSE
             insert into ouf (crt,date) values (n+1,now());
             return null;
         END IF;
    END IF;
    return null;
END;

$BODY$;

CREATE TRIGGER count_insrt
    AFTER INSERT
    ON public.test
    FOR EACH ROW
    EXECUTE PROCEDURE public.count_inserted();

但是当我尝试插入新行时,我收到此错误:

  

记录旧版尚未分配

如果您对此错误的来源有任何疑问,请告诉我。

1 个答案:

答案 0 :(得分:0)

我在https://stackoverflow.com/a/47041325/5315974回答 你不应该用触发器保存这些统计数据。就像更新一样,您可以查询pg_stat个视图的插入内容:

select n_tup_ins from pg_stat_all_tables where relname = 'test';

现在,如果您希望每天汇总(假设来自OLD.date),您可以

insert into ouf (crt,date) 
select n_tup_ins, now()::date from pg_stat_all_tables where relname = 'test';

每天一次 - 不是每次插入