PostgreSQL 删除触发器

4

我正在 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
你遇到了什么错误? - errata
1个回答

15

因此,PostgreSQL触发器存在一些限制,例如:

PostgreSQL仅允许执行用户定义的函数以执行触发操作。

因此,要实现所需功能,您需要定义一个函数并使触发器触发该函数。类似以下代码应该可以工作:

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

触发器:

CREATE TRIGGER delete_contacto 
BEFORE DELETE ON cliente 
FOR EACH ROW 
EXECUTE PROCEDURE clienteDelete();

我并不是Postgresql专家,所以请不要期望上面的代码是完美的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接