0

更新または削除時にテーブル「demand_details」を持っています各行の値を別のテーブル「demand_details_log」に保存したい

私の機能は次のとおりです

CREATE OR REPLACE FUNCTION water_blogb() RETURNS trigger AS
$BODY$ 
BEGIN 
    IF (TG_OP='UPDATE') THEN  
       INSERT INTO demand_details_log VALUES ('U',now(),OLD.*); 
       RETURN NEW; 
    END IF; 
    IF (TG_OP='DELETE') THEN  
       INSERT INTO demand_details_log VALUES ('D',now(),OLD.*); 
       RETURN OLD; 
    END IF;
END;
$BODY$ LANGUAGE plpgsql

私のトリガーは次のとおりです

CREATE TRIGGER water_btrg_b
  AFTER UPDATE OR DELETE
  ON demand_details
  FOR EACH ROW
  EXECUTE PROCEDURE water_blogb();

私の問題は同じトリガーであり、関数は他のテーブルでうまく機能しますが(テーブル、トリガー、関数名を変更することにより)、デマンドテーブルでは機能しません。他のテーブルトリガーの両方で「RAISE NOTICE 'working...'」を試してみましたが、デマンドテーブルではまったく起動しませんでした。

4

1 に答える 1

0

ご覧のとおり、トリガーは継承されません。これにより、継承されたテーブル構造でトリガーを管理することが困難になります。関連する問題については、 http://ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-3-table.htmlおよびhttp://ledgersmbdev.blogspot.comを参照してください。 /2012/08/or-modelling-32-setsubset-modelling.html .

現在、これらはテーブルのパーティション化に直接対処していません。これは、ここでやろうとしていることかもしれません。すべてのサブテーブルにトリガーが正しくインストールされていることを確認するために実行できる追加のテストを組み込むことをお勧めします。How to find inherited tables in PostgreSQL? をご覧になることをお勧めします。また、親のトリガーを共有しない子テーブルのレポートを作成できるように、pg_trigger テーブルもあります。

于 2013-02-19T02:02:54.977 に答える