【问题标题】:Counting number of updates计算更新次数
【发布时间】:2017-10-31 15:17:01
【问题描述】:

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

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更新后。 如果您有任何想法,请告诉我。 诚挚的。

【问题讨论】:

  • 与编辑前的Count number of updates 非常相似。
  • 为什么不select n_tup_upd from pg_stat_all_tables where relname = 'test'?.. 你为什么要这样做?.. 只是在更新时获得诊断 - 为什么超过触发,在其他地方保存价值,然后选择它......
  • @Vao Tsun 谢谢你的回答。

标签: sql postgresql plpgsql database-trigger


【解决方案1】:

只是获取更新的数量(并且可能在某些语句之前和之后进行比较,你可以只是

select n_tup_upd from pg_stat_all_tables where relname = 'test'

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2010-10-02
    • 2021-01-14
    • 2018-06-13
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多