问题 调试 postgresql 触发器 EN
最编程
2024-06-13 21:28:27
...
您可以在触发器函数中使用“raise notice”语句来调试它。调试根本不被调用的触发器则是另一回事。
如果你在你的触发器函数中添加了一个'raise exception‘,你还能做插入/更新吗?
此外,如果更新测试与插入测试发生在同一个事务中,那么now()将是相同的(因为它在每个事务中只计算一次),因此更新似乎不会做任何事情。如果是这种情况,或者在单独的事务中执行它们,或者如果这是单元测试,而您不能这样做,则使用clock_timestamp()。
我有一个依赖于事务之间经过的时间的单元测试,所以在单元测试开始时,我有如下内容:
ALTER TABLE documents
ALTER COLUMN modification_time SET DEFAULT clock_timestamp();
然后在触发器中使用"set modification_time = default“。
因此,通常它不会做额外的计算,但在单元测试期间,这允许我使用pg_sleep进行插入,以模拟时间流逝,并实际将其反映在数据中。