用于在子表中插入新记录的存储过程

问题描述 投票:0回答:1

我正在尝试创建一个存储过程以在多个子表中插入新记录(使用Greenplum)我有一个主表和一组子表。我想将主表中的新记录插入子表(我有大约20个子表)。我的假设是我应该创建一个函数,然后是一个触发器。

请注意,我只想在子表中插入一些字段。

我做了几次尝试,但这是最后一次:(如果它看起来非常糟糕,请提前抱歉。我从未创建任何触发器功能)

功能:

CREATE OR REPLACE FUNCTION 
schema1.newcustomerdata() RETURNS trigger AS $new_customer_data$
BEGIN
    INSERT INTO schema1.customeridentifiers 
                (customer_id,
                date_time)
        SELECT NEW.customer_id,
                date_time 
        FROM schema1.customersmaster 
        ;
    RETURN NEW;
END;
$new_customer_data$ LANGUAGE plpgsql;

触发:

CREATE  TRIGGER newcustomerdata 
AFTER INSERT ON schema1.customersmaster 
FOR EACH ROW EXECUTE PROCEDURE newcustomerdata();

功能和触发器运行。但是,我不能再在主表中插入数据了。我收到此错误消息:

函数无法在段上执行,因为它发出非select语句

所以我的问题是:

  • 更新子表的最佳解决方案是什么?
  • 我的功能或触发器出了什么问题?
  • 你有什么建议?
stored-procedures triggers parent-child greenplum
1个回答
0
投票

显然“不支持触发器,因为它们通常依赖于使用VOLATILE函数”使用RULES代替触发器

CREATE RULE newcustomerdata  AS ON INSERT TO schema1.customersmaster 
DO also INSERT INTO schema1.customeridentifiers VALUES (NEW.customer_id, NEW.date_time);
© www.soinside.com 2019 - 2024. All rights reserved.