如果在postgresql中创建/更新了一行记录,如何触发另一行记录的创建/更新
我正在接收外部的csv记录,然后当我在postgresql中创建或更新条目时,我需要创建一个只有符号差异的镜像条目。这是可以在程序级完成的,我很想知道是否可以使用触发器。 对于我能找到的示例,它们都以代码结尾,如果在postgresql中创建/更新了一行记录,如何触发另一行记录的创建/更新,postgresql,Postgresql,我正在接收外部的csv记录,然后当我在postgresql中创建或更新条目时,我需要创建一个只有符号差异的镜像条目。这是可以在程序级完成的,我很想知道是否可以使用触发器。 对于我能找到的示例,它们都以代码结尾, 对于每一行,执行过程foo() 并通常处理检查,使用NEW.additionalfield添加附加信息,或插入到另一个表中。如果我以这种方式使用触发器在同一个表中插入另一行,那么触发器似乎会再次被触发,并且创建过程变得递归。 有没有办法解决这个问题?在处理触发器时,经验法则是: 如果它根
对于每一行,执行过程foo()
并通常处理检查,使用NEW.additionalfield
添加附加信息,或插入到另一个表中。如果我以这种方式使用触发器在同一个表中插入另一行,那么触发器似乎会再次被触发,并且创建过程变得递归。
有没有办法解决这个问题?在处理触发器时,经验法则是:
AFTER
触发器约束
[after]触发器pg\u trigger\u depth()
。但我还是反对
请注意,可以将约束触发器创建为可延迟初始延迟
。这会将约束触发器延迟到事务的最后,而不是紧跟在语句之后
您的问题和昵称暗示您想知道如何在复式簿记应用程序中自动平衡一组行。假设是这样,不要自动创建平衡条目。相反,开始一个事务,分别输入每一行,并使用一个(对于每一行,可延迟的初始延迟)约束触发器从中提取内容,如果有任何内容不平衡,则拒绝整个批处理。当你想平衡两条或三条以上的线时,这样做会让你省去一大堆头疼的事
另一种解读可能是您希望创建审计跟踪。如果是这样,请创建其他审核表并使用after触发器填充它们。有多种方法可以创建和管理这些审核表。调查(如果您对表的完整历史记录(包括与其他审核表的关系历史记录)感兴趣,则Fwiw类型6的start\u end
列的类型tsrange
或tstzrange
适用于审核表。),并在需要历史报告时使用审计表