霸王龙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好像只支持创建触发器的语法,也能创建触发器成功,但是触发器时不生效的

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况