PostgreSQL删除触发器

时间:2015-05-16 23:39:08

标签: postgresql triggers

我在PGAdminIII上创建了一个触发器,我想删除在另一个表上有外键的行。但是我收到一个语法错误,我找不到问题所在:

CREATE TRIGGER clienteDelete
BEFORE DELETE ON cliente
FOR EACH ROW
BEGIN
    DELETE FROM contacto WHERE contacto.id = OLD.contacto_idcontacto;
END;

ERROR:  syntax error at or near "BEGIN"
LINE 4: BEGIN
        ^

********** Error **********

ERROR: syntax error at or near "BEGIN"
SQL state: 42601
Character: 68

我不习惯Postgres上的触发器语法,但这是我根据SQL标准所知道的。任何帮助都会非常苛刻

1 个答案:

答案 0 :(得分:6)

所以Postgresql触发器有一些限制,例如

  

PostgreSQL只允许执行用户定义的函数   触发动作。

所以要完成你想要的东西你需要定义一个函数并使触发器触发它。这样的事情应该有效:

RegExp

触发器:

CREATE FUNCTION clienteDelete() RETURNS TRIGGER AS $_$
BEGIN
    DELETE FROM contacto WHERE contacto.id = OLD.contacto_idcontacto;
    RETURN OLD;
END $_$ LANGUAGE 'plpgsql';

我不是Postgresql专家,但是期望上面的代码不完美。