Postgresの遷移表とは何ですか?



What Is Transition Tablein Postgres



解決:

あなたはどのようにあるか知っていますOLDと新しいレコード変数各行のトリガーについて?

遷移表は各ステートメントの同等物。これらは新旧のタプルを含むテーブルであるため、トリガーは何が変更されたかを確認できます。




私はクレイグの機能の説明が本当に好きです。 SQL-2011仕様では、トリガーのコンテキストでそれらを次のように定義しています。 「削除、挿入、または置換される行のコレクションは、遷移表と呼ばれます。」 同様の説明がドキュメントに記載されています。

遷移表中AFTERトリガーは、を使用して指定されます標準的な方法でのREFERENCING句、で使用される行変数FOR EACHROWトリガーはで指定されない場合がありますREFERENCING句。これらは、トリガー関数が記述されている言語に依存する方法で使用できます。一部の言語は、あるかのように効果的に動作しますを含むREFERENCING句OLD ROW AS OLD NEW ROW ASNEW。



基本的に、ステートメント全体の変更を利用できるようにするため、非常に便利です。参考までに、作成トリガーのDDLは、遷移テーブルを使用すると次のようになります。

古いテーブルを古いテーブルとして参照する新しいテーブルを新しいテーブルとして参照する

ここに例があります。これはテストスイートの例です。

CREATE TABLE transition_table_base(id int PRIMARY KEY、val text); CREATE FUNCTION transition_table_base_ins_func()RETURNSはLANGUAGE plpgsql AS $$ DECLARE ttextをトリガーします。 lテキスト; BEGIN t = ''; FOR l IN EXECUTE $ q $ EXPLAIN(タイミングオフ、コストオフ、詳細オン)SELECT * FROM newtable $ q $ LOOP t = t || l || E ' n';ループを終了します。 RAISE INFO '%'、t;新規返品;終わり; $$; CREATE TRIGGER transition_table_base_ins_trig AFTER INSERT ONtransition_table_base古いテーブルを古いテーブルとして参照新しいテーブルを新しいテーブルとして各ステートメントの実行手順transition_table_base_ins_func();

いくつかの追加の注意事項



  1. それらはでのみ利用可能ですAFTERトリガー。
  2. 彼らは次のようなことを考慮に入れます紛争について。

それを指摘することが重要です PG10で利用できるかどうかは完全にはわかりません。 。遷移表には多くの未解決の問題があります。ほとんどにパッチがあります。ある種の日常的な内紛があります。重い物を持ち上げたのは他の誰かが拾ったようです。スレッドは、私たちがすぐに知ることを示しています。

著者は答えました-再びうまくいっているようです、。