Postgresql 9.4では、テーブルAとBのUNIONとしてビューを実行しており、基になるテーブルのレコードを「削除」すると、単一のDELETED N ROWSメッセージが表示されます(見る)。
詳細はこちらです。私たちの見解は、
_A
--
id, name
1, afoo
2, abar
B
--
id, name
3, bfoo
4, bbar
_
したがって、ビューCは次のようになります。
_C
--
1, afoo
2, abar
3, bfoo
4, bbar
_
CREATE TRIGGER delete_trigger INSTEAD OF DELETE C FOR EACH ROW DO delete_trigger()
を実行しました。これは基本的にIDで行を削除します。
_-- our function trigger():
$$
delete from A where id=old.id;
GET DIAGNOSTICS deletedA = ROW_COUNT;
delete from B where id=old.id;
GET DIAGNOSTICS deletedB = ROW_COUNT;
raise notice 'deleted % records from A, % records from B', deletedA , deletedB;
$$
_
_delete * from C;
_のようなコマンドを発行する場合、理想的な目標は、次のような単一のメッセージを持つことです。
_deleted 2 records from A, 2 records from B
_
しかし、代わりに-私たちはよく知らないので-、
_deleted 1 records from A, 0 records from B
deleted 1 records from A, 0 records from B
deleted 0 records from A, 1 records from B
deleted 0 records from A, 0 records from B
_
削除されたレコードの単一の合計を取得することは可能ですか?
これのパフォーマンスも心配です。
ありとあらゆる助けが大歓迎です!
トリガーされたイベントは、行ごとに呼び出されます。
構文は
CREATE TRIGGER c_view_delete_trg INSTEAD OF DELETE ON c_view FOR EACH ROW EXECUTE PROCEDURE c_view_delete();
つまり、関数は削除される行ごとに1回呼び出されます。これが、1行ずつ印刷される理由です。