【问题标题】:Will an AFTER trigger in Postgres block an insert/update?Postgres 中的 AFTER 触发器会阻止插入/更新吗?
【发布时间】:2010-06-30 01:12:38
【问题描述】:

如果我在 PostgreSQL 中设置了一个 AFTER 触发器以在插入/更新后触发,那么调用软件是否必须等待触发器完成才能将控制权返回给调用软件?还是触发器会在幕后自行运行?

【问题讨论】:

  • 如果您需要一些东西来完成“幕后”,您的触发器可以使用 dblink_send_query postgresql.org/docs/current/static/… 在您的触发器中发送异步请求 - 取决于您的要求。

标签: postgresql triggers blocking


【解决方案1】:

是的,因为它是在同一个事务中执行的。如果触发器失败,插入/更新也会失败。只需执行一个会失败的查询的测试(选择一个不存在的表),您就可以看到事情是如何工作的以及您的应用程序将如何表现。

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER
AS
$$
BEGIN
  EXECUTE 'SELECT fail';
END;
$$
LANGUAGE plpgsql;

【讨论】:

  • 有没有办法避免这种情况?这意味着即使触发器失败,插入/更新操作也不应该失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多