GreenPlum - 带触发器的表 - 插入失败

Posted

技术标签:

【中文标题】GreenPlum - 带触发器的表 - 插入失败【英文标题】:GreenPlum - Table With Trigger - Insert Failed 【发布时间】:2014-03-11 04:19:33 【问题描述】:

这是我第一次在青梅环境中使用触发器。我想我已经完成了大部分设置,但是在插入数据时遇到了一些问题。这是我的触发器

CREATE TRIGGER insert_trigger
    BEFORE INSERT ON leads.abhi_temp
    FOR EACH ROW EXECUTE PROCEDURE leads.my_trigger();

这里是触发器的定义

CREATE OR REPLACE FUNCTION leads.my_trigger()
RETURNS TRIGGER AS $$
BEGIN
    IF ( NEW.date >= DATE '2003-01-01' AND
         NEW.date < DATE '2003-12-31' ) THEN
        INSERT INTO leads.abhi_temp_y2003 VALUES (NEW.*);
    ELSIF ( NEW.date >= DATE '2004-01-01' AND
         NEW.date < DATE '2004-12-31' ) THEN
        INSERT INTO leads.abhi_temp_y2004 VALUES (NEW.*);
    END IF;
    RETURN NULL;
END;
$$
LANGUAGE plpgsql;

现在将数据插入我使用的表中

insert into leads.myData (select column1, column2 from leads.someOtherDara where column1 = '1');

但这给了我一个错误

ERROR:  function cannot execute on segment because it issues a non-SELECT statement (functions.c:133)

我认为错误是因为我使用嵌套查询来插入数据。不知道如何解决这个问题。任何建议。提前感谢您的帮助

【问题讨论】:

如果您显示leads.my_trigger 的定义可能会有所帮助。 完成。添加信息 错误信息表明Greenplum在触发器中不支持DML(insertupdatedelete)。 我想是有道理的。我改用了规则 【参考方案1】:

我知道,Greenplum 中对触发器的支持非常有限,它不支持 DML 操作。

我想知道你是如何做到这一点的,我的意思是你在之前的 cmets 中所说的如何应用这些规则

【讨论】:

以上是关于GreenPlum - 带触发器的表 - 插入失败的主要内容,如果未能解决你的问题,请参考以下文章

如何识别Greenplum中的表是不是已更改?

将数据插入 Greenplum 物理表

在 Greenplum 中使用触发器时出错

在plpython函数greenplum数据库中插入语句

Greenplum:有没有办法定义一个数据将只存储在 master 中的表

SQL Server 无法插入启用触发器的表中