2016-10-21 7 views
2

私は、field_1またはfield_2の挿入または更新の前にトリガーされるtrigger_function_aを持っています。トリガー機能は別のトリガーをトリガーするはずですか?

trigger_function_b> field_3またはfield_4 =の挿入または更新する前にFIELD_1の挿入または更新する前に

またはfield_2 => trigger_function_a

:私はfield_3またはfield_4の挿入または更新する前にトリガされ、別のtrigger_function_bを持っていますさて、trigger_function_aはfield_3を変更します。 trigger_function_bはトリガされるはずですか?私はそれを試みましたが、それは引き起こされません。どうして?私は利用可能なすべてのドキュメントを検索しましたが、これに対する答えは見つかりませんでした。

ここでは構文を気にしないでください。フィールドを自分で変更すると、トリガー関数は自分自身で機能します。 g。 SQLを介して。私がここで尋ねるのは、別のトリガー関数がフィールドを変更すると、トリガー関数が起動されるはずですか?

+0

これは興味深いかもしれません:http://dba.stackexchange.com/questions/103402/how-to-prevent-a-postgresql-trigger-from-being-fired-by-another-trigger – verhie

+0

@verhie:ありがとうございました。それを見てみましょう。ところで、これはpostgresql 9.5 –

答えて

0

あなたは正しいですが、trigger_function_bはこの場合呼び出されません。 the documentation

ルック:その列のいずれかがUPDATEコマンドのSETリストにターゲットとしてリストされているとき

列固有のトリガー(UPDATE OF column_name構文を使用して定義された1)が発生します。 BEFORE UPDATEトリガによる行の内容の変更は考慮されていないため、トリガが起動されていなくても列の値が変更される可能性があります。逆に、UPDATE ... SET x = x ...などのコマンドは、列の値が変更されていなくても、列xでトリガを起動します。

重要な点は、列がSETリストに表示されている場合に限り、トリガーが起動することです。

+0

です。でも、これは*構文の問題です。 NEW.field_3 = ...構文を使用しました。私は物事を更新しなければならないと思われます... –

+0

"* UPDATEコマンドの' SET'リスト*でターゲットとしてリストされています。関数で 'NEW.field_3'に代入すると、それは違うものです。 –

関連する問題