PostgreSQL 删除触发器

2024-01-03

我正在 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 标准所知道的。任何帮助将不胜感激


所以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 专家,所以预计上面的代码并不完美。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 删除触发器 的相关文章

随机推荐