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();いくつかの追加の注意事項
- それらはでのみ利用可能です
AFTERトリガー。
- 彼らは次のようなことを考慮に入れます
紛争について。
それを指摘することが重要です PG10で利用できるかどうかは完全にはわかりません。 。遷移表には多くの未解決の問題があります。ほとんどにパッチがあります。ある種の日常的な内紛があります。重い物を持ち上げたのは他の誰かが拾ったようです。スレッドは、私たちがすぐに知ることを示しています。
著者は答えました-再びうまくいっているようです、。