我编写了这个触发器函数来计算新插入行的数量并将其存储在表中:
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();
但是当我尝试插入新行时,我收到此错误:
记录旧版尚未分配
如果您对此错误的来源有任何疑问,请告诉我。
答案 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';
每天一次 - 不是每次插入