1
46
|
2
3
您可以在触发器函数内使用“raise notice”语句来调试它。调试根本不被调用的触发器是另一回事。 如果您在触发器函数中添加了“引发异常”,您仍然可以进行插入/更新吗? 另外,如果更新测试与插入测试发生在同一个事务中,那么now()将是相同的(因为每个事务只计算一次),因此更新似乎不会做任何事情。如果是这样,可以在单独的事务中进行,或者如果这是一个单元测试,而您不能这样做,那么可以使用clock_timestamp()。 我有一个单元测试,它取决于事务之间经过的时间,因此在单元测试的开始,我有如下内容:
然后在触发器中,使用“设置修改时间=默认”。 所以通常它不做额外的计算,但在单元测试期间,这允许我在pg_sleep之间进行插入,以模拟时间传递,并将其反映在数据中。 |
3
3
结果发现我在上面的问题中使用了继承,并且忘记提到它。现在,对于每个可能遇到这种情况的人,这里有一些调试提示: 使用以下代码调试触发器正在执行的操作:
要查看实际调用的触发器、调用的次数等,下面的语句是生命保护程序的选择:
还有一件事我以前不知道: 触发器仅在更新其定义的准确表时触发。如果使用继承,还必须在子表上定义它们! |
tggtsed · PostgreSQL从平均值中排除值 1 年前 |
Dawid · 为什么我不能在子查询中使用表别名? 2 年前 |
CraZyCoDer · 在PostgreSQL中锁定潜在事务 2 年前 |
ranebec · 计数时如何返回0而不是null? 2 年前 |
Flo · 分组依据中的SQL大小写 2 年前 |