Postgresql 如何优化这一点:许多Postgres触发器在一个事务中调用相同的函数

Postgresql 如何优化这一点:许多Postgres触发器在一个事务中调用相同的函数,postgresql,triggers,Postgresql,Triggers,我的一个数据库表中有一个缓存字段,它会根据许多不同的表以及这些表中字段的状态进行更新 这些表中的每一个都通过一个触发器调用相同的函数:updateCachedField(basetable_id INTEGER)。updateCachedField函数查询所有其他表,并计算基表的新缓存值。updateCachedField函数非常复杂,成本非常高 在单个事务期间,影响缓存字段的许多表都可能被更改。因此,在单个事务中,updateCachedField函数可能会被调用50次。。。但只有5个不同的基

我的一个数据库表中有一个缓存字段,它会根据许多不同的表以及这些表中字段的状态进行更新

这些表中的每一个都通过一个触发器调用相同的函数:updateCachedField(basetable_id INTEGER)。updateCachedField函数查询所有其他表,并计算基表的新缓存值。updateCachedField函数非常复杂,成本非常高

在单个事务期间,影响缓存字段的许多表都可能被更改。因此,在单个事务中,updateCachedField函数可能会被调用50次。。。但只有5个不同的基表id


是否有办法对此进行优化,使updateCachedField函数只被调用5次而不是50+?

我认为最好的选择是使用基于xmin值或其他信息的可延迟约束触发器和查询。实际上,您也可以复制“日志”数据,以便在其他地方进行快照

如果没有清晰的信息,就无法真正了解您所看到的内容,但一种选择是基本上有三组表:

  • 直播台。更新(增量或其他聚合有用信息)在更新或插入时写入日志表

  • 日志表。这些只是附加的

  • 聚合快照表,定期聚合新的日志表集

  • 然后,您可以拥有一个实时视图,该视图将显示当前的聚合数据,仅从上一个快照进行聚合。

    其他答案是否有帮助?