PostgreSQL 删除触发器
PostgreSQL Delete Trigger
我正在 PGAdminIII 上创建一个触发器,我想在其中删除在另一个 table 上具有外键的行。但是我遇到了语法错误,我找不到问题出在哪里:
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 only allows the execution of a user-defined function for
the triggered action.
因此,要完成您想要的,您需要定义一个函数并让触发器触发该函数。这样的事情应该有效:
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 专家,所以希望上面的代码不完美。
我正在 PGAdminIII 上创建一个触发器,我想在其中删除在另一个 table 上具有外键的行。但是我遇到了语法错误,我找不到问题出在哪里:
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 only allows the execution of a user-defined function for the triggered action.
因此,要完成您想要的,您需要定义一个函数并让触发器触发该函数。这样的事情应该有效:
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 专家,所以希望上面的代码不完美。