嗨,我创建了这个触发器函数来计算受更新影响的行数。
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。 使用触发器,将数量保存到表中并选择它看起来确实是开销