Postgresql Postgres:缩小触发范围

Postgresql Postgres:缩小触发范围,postgresql,triggers,Postgresql,Triggers,(博士后8.3) 我使用的是一个DB table X 100+列宽(我很遗憾无法更改),其中很多都会通过正常的业务流程不断更新 我需要根据对X中特定列foo的更新来更新表Y,该列由异常业务流程更新。但是,由于针对X的更新数量非常高,因此仅应用检查X.foo以决定是否更新Y的触发器被认为是不可接受的 表Y也不是这条线的终点,有几个祖先的链条很深,所有这些都需要从根上冒出来 我能想到的唯一解决办法是: 将X拆分为多个表(不允许) 作为更新X的业务逻辑的一部分,显式地对Y(和Z等)进行更新,但这将占

(博士后8.3)

我使用的是一个DB table X 100+列宽(我很遗憾无法更改),其中很多都会通过正常的业务流程不断更新

我需要根据对X中特定列foo的更新来更新表Y,该列由异常业务流程更新。但是,由于针对X的更新数量非常高,因此仅应用检查X.foo以决定是否更新Y的触发器被认为是不可接受的

表Y也不是这条线的终点,有几个祖先的链条很深,所有这些都需要从根上冒出来

我能想到的唯一解决办法是:

  • 将X拆分为多个表(不允许)
  • 作为更新X的业务逻辑的一部分,显式地对Y(和Z等)进行更新,但这将占用很大的空间,并为某些人在另一个流程中执行相同操作时出错或遗漏留下很大的空间。这显然不是一个好的设计(我正试图尽我所能逐步修复)

有人知道一种通过列或任何其他选择来限制触发器执行的方法吗?视图上的触发器?其他伏都教?

不幸的是,在9.0版发布之前()您必须求助于第二种解决方案。

不幸的是,在9.0版发布之前()您必须求助于第二种解决方案。

为什么标准触发器是不可接受的?运行一个函数,首先检查是否
NEW.column\u name=OLD.column\u name
,如果是相同的,则只返回,这样做成本很低。你可以在一秒钟内发射数十万颗。您的系统可能无法每秒处理数百个以上的事务-数量级减少3个数量级


条件触发器之后,9.0中的延迟触发器会更快,但只比普通触发器快2倍左右。请参阅in的博客。您可以在中运行一些基准测试。

为什么标准触发器是不可接受的?运行一个函数,首先检查是否
NEW.column\u name=OLD.column\u name
,如果是相同的,则只返回,这样做成本很低。你可以在一秒钟内发射数十万颗。您的系统可能无法每秒处理数百个以上的事务-数量级减少3个数量级


条件触发器之后,9.0中的延迟触发器会更快,但只比普通触发器快2倍左右。请参阅in的博客。您可以在中运行一些基准测试。

您可能可以使用规则做一些事情,但前面已经说过,触发器应该“足够好”。但是,如果您试图解决的是管理问题而不是技术问题,那么规则可能会对您有所帮助。他们将在执行期间更早地应用。注意它们的一些陷阱,通常是序列之类的。

你也许可以用规则做一些事情,但前面已经说过,触发器应该“足够好”。但是,如果您试图解决的是管理问题而不是技术问题,那么规则可能会对您有所帮助。他们将在执行期间更早地应用。注意它们的一些缺陷,通常是序列之类的。

谢谢你,但只是为了让人困惑,这看起来像是8.5而不是9.0?现在它是8.5 alpha,但将作为9.0发布。谢谢你,但简单地说,这看起来像是8.5而不是9.0?现在是8.5 alpha,但将作为9.0发布。感谢您的博客链接。我强烈怀疑这是一个盲目优化的案例,但无论如何,我必须这样做。比我更有权威的人认为触发器不值得使用。:/(fwiw,我们每秒要看几千次更新)。也许如果你用一种“特殊的新技术,使用特殊类型的触发器,专门针对这种情况进行优化”,来构建一个基准测试。使用“begin;if OLD.colname=NEW.colname”这样的触发器,然后返回NEW;选择昂贵的_function();end;”和一些听起来非常聪明(和默认值;-)的修饰符,如“VOLATILE STRICT SECURITY INVOKER”。感谢您的博客链接。我强烈怀疑这是一个盲目优化的案例,但无论如何,我必须这样做。比我更有权威的人认为触发器不值得使用。:/(fwiw,我们每秒要看几千次更新)。也许如果你用一种“特殊的新技术,使用特殊类型的触发器,专门针对这种情况进行优化”,来构建一个基准测试。使用“begin;if OLD.colname=NEW.colname”这样的触发器,然后返回NEW;选择昂贵的_function();end;”;以及一些听起来非常聪明(和default;-)的修饰符,比如“VOLATILE STRICT SECURITY INVOKER”。最后使用了规则,还没有进行基准测试,但由于这确实是一个管理问题,现在有一个替代解决方案就足够了。未来的观众在寻找答案:希望你有PG9!最终还是遵循了规则,还没有达到基准,但由于这确实是一个管理问题,现在有一个替代解决方案就足够了。未来的观众在寻找答案:希望你有PG9!