Stored procedures 在子表中插入新记录的存储过程

Stored procedures 在子表中插入新记录的存储过程,stored-procedures,triggers,parent-child,greenplum,Stored Procedures,Triggers,Parent Child,Greenplum,我正在尝试创建一个存储过程,以便在许多子表中插入新记录(使用Greenplum)。我有一个主表和一组子表。我想将主表中的新记录插入子表(我有大约20个子表)。我的假设是我应该创建一个函数,然后创建一个触发器 注意,我只想在子表中插入一些字段 我做了一些尝试,但这里是最后一个:(如果它看起来很糟糕,请提前道歉。我从未创建任何触发器函数) 功能: CREATE OR REPLACE FUNCTION schema1.newcustomerdata() RETURNS trigger AS $new

我正在尝试创建一个存储过程,以便在许多子表中插入新记录(使用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语句

因此,我的问题是:

  • 更新子表的最佳解决方案是什么
  • 我的功能或触发器有什么问题
  • 你有什么建议
显然,“触发器不受支持,因为它们通常依赖于易失性函数的使用”使用规则而不是触发器

CREATE RULE newcustomerdata  AS ON INSERT TO schema1.customersmaster 
DO also INSERT INTO schema1.customeridentifiers VALUES (NEW.customer_id, NEW.date_time);

PostgreSQL 8.2.15(Greenplum数据库4.3.10.0非常感谢您的回复。但是它给了我另一条错误消息。(错误:“日期和时间”列不存在):(date_time是schema1.CustomerMaster表中的一列吗?是的,此字段是master表的一部分。应用于填充/更新子表。然后可以使用NEW.date_time。更新解决方案。请尝试此操作。非常感谢您的帮助,但它会给我另一条错误消息。.SQL错误[XX000]:错误:函数无法在段上执行,因为它在SQL语句处发出非SELECT语句(functions.c:135)详细信息:SQL语句“插入schema1.customeridentifiers(customer\u id,date\u time)值($1,$2)”PL/pgSQL函数