计算更新次数



嗨,我创建了这个触发器函数来计算受更新影响的行数。

create table smt (
id serial primary key,
    num int
)
CREATE OR REPLACE FUNCTION count_updated()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    AS $BODY$
DECLARE 
    n int;
BEGIN 
    IF(TG_OP = 'UPDATE') THEN       
        get diagnostics n = row_count;
        insert into smt (num) values (n);
        return null;
    END IF;
END;
$BODY$;
CREATE TRIGGER count_updt
AFTER UPDATE  ON test
    FOR EACH ROW EXECUTE PROCEDURE count_updated(); 

我想做的是使用 GET DIAGNOSTICS 将更新的test行数存储在smt中,但是当我读取 smt 表的内容时,即使在更新后,保留用于存储row_count的字段也是 0。如果你对我有任何想法。亲切。

只获取更新量(并可能比较某些语句之前和之后,您可以只

select n_tup_upd from pg_stat_all_tables where relname = 'test'

否则,您可以直接使用GET DIAGNOSTICS更新(对于 plpgsql)和 update ... returning 与 CTE 一起使用,count(1) 用于 sql。 使用触发器,将数量保存到表中并选择它看起来确实是开销

最新更新