2016-07-06 8 views
0

私は、それぞれのクライアントに対して親テーブルと800を超える子テーブルを持っています。私はそれぞれのために同じトリガーを作成したいと思います。私は親テーブルのためにそれを直接作成する方法があり、各子テーブルはそれを聞くでしょうか?親テーブルのトリガもPostgresのすべての子テーブルをリッスンする方法はありますか?

私は、クライアントテーブルごとに同じスクリプトを作成することができますが、具体的には直接解決策を探しています。

答えて

0

inheritを使用すると、メインテーブルのトリガーが作成され、変更が子テーブルで発生します。

これは、挿入トリガーの例です。私はメインテーブルに挿入するだけで、avlと同じ更新または削除を確認できます。私はちょうど

を作っこの question

CREATE OR REPLACE FUNCTION avl_db.avl_insert_trigger() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    IF (NEW.event_time >= '2017-06-01 00:00:00' AND NEW.event_time < '2017-06-02 00:00:00') THEN 
     INSERT INTO avl_db.avl_20170601 VALUES (NEW.*); 
    ELSEIF (NEW.event_time >= '2017-06-02 00:00:00' AND NEW.event_time < '2017-06-03 00:00:00') THEN 
     INSERT INTO avl_db.avl_20170602 VALUES (NEW.*); 
    ELSEIF (NEW.event_time >= '2017-06-03 00:00:00' AND NEW.event_time < '2017-06-04 00:00:00') THEN 
     INSERT INTO avl_db.avl_20170603 VALUES (NEW.*); 
    ELSEIF (NEW.event_time >= '2017-06-04 00:00:00' AND NEW.event_time < '2017-06-05 00:00:00') THEN 
     INSERT INTO avl_db.avl_20170604 VALUES (NEW.*); 
    ELSEIF (NEW.event_time >= '2017-06-05 00:00:00' AND NEW.event_time < '2017-06-06 00:00:00') THEN 
     INSERT INTO avl_db.avl_20170605 VALUES (NEW.*); 
.... 
    ELSE 
     RAISE EXCEPTION 'Date out of range.'; 
    END IF; 

    RETURN NULL; -- avoid insert in the main table 

詳細

関連する問題