我正在尝试创建一个存储过程,以在许多子表中插入新记录(使用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();
函数和触发器运行。但是,我不能再在主表中插入数据。 我收到此错误消息:
该函数无法执行,因为它发出了非选择语句
所以我的问题是:
答案 0 :(得分:0)
显然“不支持触发器,因为它们通常依赖于VOLATILE函数的使用”使用规则代替触发器
CREATE RULE newcustomerdata AS ON INSERT TO schema1.customersmaster
DO also INSERT INTO schema1.customeridentifiers VALUES (NEW.customer_id, NEW.date_time);