PostgreSQL - 创建触发器:函数不存在

PostgreSQL - Creating a trigger: function does not exist

我现在正在为学校编写脚本,遇到了一个我无法修复的奇怪错误。 所以我有一个播放列表、曲目和一个播放列表输入 table。 我的任务是创建一个触发器,如果​​我 add/delete 曲目到我的播放列表,amountOfTracks 变量应该是 increased/decreased.

所以现在是奇怪的错误: 我创建了一个函数 "playlistInputAdd",它在执行 "select playlistInputAdd(1,1)" 时已经有效。 问题是,如果我创建我的触发器,它会说这个函数不存在。我看到有人问过同样的问题,但他没有添加参数,而我确实添加了。

playlistInputAdd函数:

CREATE FUNCTION playlistInputAdd(ID int, Amount int)
RETURNS VOID
AS $$
BEGIN
    UPDATE playlist
    SET amountOfTracks = amountOfTracks + Amount
    WHERE playListID = ID;
END;
$$ LANGUAGE plpgsql;

playlistInputAdd_trigger触发器:

CREATE TRIGGER playlistInputAdd_trigger 
AFTER INSERT
ON playlistInput 
FOR EACH ROW 
EXECUTE PROCEDURE playlistInputAdd(playlistID, 1);

playlistInputDelete_trigger触发器:

CREATE TRIGGER playlistInputDelete_trigger 
AFTER INSERT
ON playlistInput 
FOR EACH ROW 
EXECUTE PROCEDURE playlistInputAdd(playlistID, 1);

错误信息:

ERROR: function playlistinputadd() does not exist

提前谢谢!

必须使用空参数列表和 RETURNS trigger 定义触发函数。这是导致您收到错误的参数列表。

可以将参数传递给CREATE TRIGGER中的函数(即使参数列表必须为空),但这些参数必须是常量并且可以访问通过函数体中的 TG_ARGV

您不需要将修改后的 table 的列作为参数传递:插入的行在触发器主体的 NEW 变量中可用。

有关更多信息,请参阅 the documentation