aro*_*rod 5 postgresql trigger view postgresql-9.4
在 Postgresql 9.4 中,我们将视图作为表 A 和 B 的联合进行处理,并且当我们“删除”底层表中的记录时(通过 aa 触发器上的看法)。
这里有更详细的信息。我们的观点看起来像,
A
--
id, name
1, afoo
2, abar
B
--
id, name
3, bfoo
4, bbar
Run Code Online (Sandbox Code Playgroud)
所以我们的视图 C 看起来像
C
--
1, afoo
2, abar
3, bfoo
4, bbar
Run Code Online (Sandbox Code Playgroud)
我们做了一个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;
$$
Run Code Online (Sandbox Code Playgroud)
如果我们发出类似 的命令delete * from C;
,我们的理想目标是有一条消息说
deleted 2 records from A, 2 records from B
Run Code Online (Sandbox Code Playgroud)
但相反,我们有 - 因为我们不知道更好 -,
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
Run Code Online (Sandbox Code Playgroud)
是否可以获得单个已删除记录的总和?
我们也很担心这方面的表现。
任何和所有的帮助都非常感谢!
小智 2
为每一行调用触发的事件。
语法是
CREATE TRIGGER c_view_delete_trg INSTEAD OF DELETE
ON c_view
FOR EACH ROW
EXECUTE PROCEDURE c_view_delete();
这意味着对于要删除的每一行都会调用该函数一次。这就是为什么它每次打印一行。