【问题标题】:Trigger to update Materialised view after an insert on another materialised view Postgresql在另一个物化视图 Postgresql 上插入后触发更新物化视图
【发布时间】:2020-04-13 01:31:21
【问题描述】:

我试图在另一个物化视图上插入、更新或删除后触发物化视图的刷新。我正在尝试使用触发功能来实现这一点。脚本如下;

CREATE FUNCTION aza_ods_version1.populate_fact_churn_m() 
RETURNS TRIGGER AS $$
BEGIN
    REFRESH MATERIALIZED VIEW aza_ods_version1.fact_churn_monthly;
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;


CREATE TRIGGER refresh_fact_churn_monthly
  AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE
  ON aza_ods_version1.fact_transactions
  FOR EACH ROW
    WHEN (OLD.* IS DISTINCT FROM NEW.*)
  EXECUTE PROCEDURE aza_ods_version1.populate_fact_churn_m();

在尝试创建触发器时,我收到此错误; 错误:“fact_transactions”不是表或视图 SQL 状态:42809

我认为这是因为 fact_transactions 是物化视图,而不是视图或表。 有什么方法可以实现我想要的吗??

【问题讨论】:

    标签: postgresql triggers


    【解决方案1】:

    你不能。
    The documentation for CREATE TRIGGER 没有提到物化视图:

    table_name The name (optionally schema-qualified) of the table, view, or foreign table the trigger is for.
    

    【讨论】:

      【解决方案2】:

      您不能在实体化视图上放置触发器,您需要在生成实体化视图的查询中的每个表引用上放置触发器。对于TRUNCATE,您需要创建一个单独的触发器:

      此外,触发器可以定义为触发 TRUNCATE,但仅限 对于每个声明。

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 2022-11-30
        • 2022-08-09
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        相关资源
        最近更新 更多