统计更新次数
Counting number of updates
大家好,我创建了这个触发器函数来计算受更新影响的行数。
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 table 的内容时,即使在更新后,保留存储 row_count 的字段仍为 0。
如果你有任何想法,请点亮我。
亲切
只获取更新量(并可能比较某些语句前后,您可以
select n_tup_upd from pg_stat_all_tables where relname = 'test'
否则,您可以直接使用 GET DIAGNOSTICS
更新(对于 plpgsql)和 update ... returning
与 CTE 和 count(1)
对于 sql。使用触发器,节省金额 table 并选择它看起来确实是一项开销
大家好,我创建了这个触发器函数来计算受更新影响的行数。
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 table 的内容时,即使在更新后,保留存储 row_count 的字段仍为 0。
如果你有任何想法,请点亮我。
亲切
只获取更新量(并可能比较某些语句前后,您可以
select n_tup_upd from pg_stat_all_tables where relname = 'test'
否则,您可以直接使用 GET DIAGNOSTICS
更新(对于 plpgsql)和 update ... returning
与 CTE 和 count(1)
对于 sql。使用触发器,节省金额 table 并选择它看起来确实是一项开销