2017-10-31 21 views
0

こんにちは私はこのトリガ関数を作成して、更新の影響を受ける行の数を数えました。更新回数をカウントする

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を使用してsmttestの更新された行の数を格納しているが、私はSMTテーブルの内容を読んだとき、ROW_COUNTをストックするために予約されているフィールドがした後も0であります更新。 あなたはイン・ライトのアイディアがあれば教えてください。 コード通り。

+0

[アップデート数を数える](https://stackoverflow.com/questions/47019137/count-number-of-updates)と非常に似ています。編集する。 – lad2025

+1

どうして 'pt_all_tablesからn_tup_updを選択するのですか?relname = 'test''?なぜあなたはそれをやっているのですか?..ただ更新に関する診断を取得する - なぜトリガをかけ、別の場所に値を保存し、それを選択するのですか? –

+0

@Vao Tsunあなたの答えをありがとう。 –

答えて

1

だけアップデートの量を取得する(そしておそらく前に比較して、いくつかのステートメントの後に、あなただけの

select n_tup_upd from pg_stat_all_tables where relname = 'test' 

そうでない場合は、SQLのためにまっすぐにplpgsqlがためのアップデート()とCTEとupdate ... returningcount(1)GET DIAGNOSTICSを使用することができますすることができますします。トリガを使用して、テーブルに金額を保存して、それを選択すると、実際にオーバーヘッドに見えます。

関連する問題