2016-11-03 10 views
0

行の更新トリガでその行が変更されたときにトリガを作成しました。列を更新するとエラーが発生します。どうすれば解決できますか?もちろんPostgresqlのトリガの例

ERROR: stack depth limit exceeded HINT: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.

CREATE OR REPLACE FUNCTION ynt_call() 
RETURNS TRIGGER AS $$ 
BEGIN 
    IF TG_OP = 'UPDATE' THEN 
     UPDATE ynt.a_test SET date_time = now(); 
    END IF; 
    RETURN NEW; 
END; 
$$ language 'plpgsql'; 
CREATE TRIGGER update_call AFTER UPDATE ON ynt.a_test FOR EACH ROW EXECUTE PROCEDURE ynt_call(); 
+0

あなたは無限ループに見えます。トリガーの値を変更するには、** new **および** old **キーワードを使用します。 – ChrisB

+0

マニュアルの例は、https://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER- EXAMPLEに近いはずです。 –

答えて

1

行を更新するときに、行を更新しているので、あなたは、時間の終わりまでループしています。特殊変数newを使用してdate_timeフィールドを次のように設定する必要があります。

CREATE OR REPLACE FUNCTION ynt_call() 
RETURNS TRIGGER AS $$ 
BEGIN 
    IF TG_OP = 'UPDATE' THEN 
     new.date_time = now(); 
    END IF; 
    RETURN NEW; 
END; 
$$ language 'plpgsql'; 
CREATE TRIGGER update_call AFTER UPDATE ON ynt.a_test FOR EACH ROW EXECUTE  PROCEDURE ynt_call(); 
関連する問題