霸王龙i 2019-03-29 17:05 采纳率: 0%
浏览 1394

Gp数据库中 non-SELECT statement问题(在GP数据库创建触发器之后发现的)

业务需要,GP库中创建触发器
目的是在某表做插入操作的时候,更新另一张表的数据
sql如下:

-- 触发器需要的函数
CREATE or replace
     FUNCTION fn_dept_info_prod_to_emg () RETURNS TRIGGER AS 
     $BODY$ 
     BEGIN
        delete from emg.tmp_dept_info;
        insert into emg.tmp_dept_info select * from t08_dept_info;
        return null;
    END;
    $BODY$ 
    LANGUAGE plpgsql;

    --触发器
    CREATE TRIGGER i_dept_info_prod_to_emg AFTER INSERT ON t08_dept_info 
    FOR STATEMENT EXECUTE PROCEDURE fn_dept_info_prod_to_emg ()

创建完成之后,我去t08_dept_info 表中做insert操作,报错如下:

INSERT INTO t08_dept_info ( deptid, dept_name ) VALUES ( 570, '测试' )
> ERROR:  function cannot execute on segment because it issues a non-SELECT statement  (seg4 101.156.96.89:40001 pid=2820)
DETAIL:  
SQL statement "delete from emg.tmp_dept_info"
PL/pgSQL function "fn_dept_info_prod_to_emg" line 3 at SQL statement

> 时间: 0.019s

上述操作在postgre数据库试过,没出错,GP库就遇到了这个问题

各种搜索之后没找到答案,希望您能帮我解答...

补充:
我的GP版本是PostgreSQL 8.3.23 (Greenplum Database 5.10.2
postgre版本是PostgreSQL 9.1.24,
可能是因为GP库版本太低不支持把...

  • 写回答

1条回答 默认 最新

  • sniper_冰 2019-04-19 10:08
    关注

    gp好像只支持创建触发器的语法,也能创建触发器成功,但是触发器时不生效的

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!