创建触发器会在PostgreSQL中出现“函数不存在”错误

时间:2017-06-08 07:43:53

标签: postgresql triggers

我正在开发一个项目,我正在尝试构建一个更新列“lastedit”的触发器(在表Person中),这是一个时间戳,用于存储对表中的最后一次更改的时间触发器创建中指定的模式(在本例中为证书)。

现在,我的问题是,当我尝试创建触发器时,在创建函数“update_lastedit()”之后,它给出了一个错误,指出该函数不存在。我想我的功能可能在某个地方不匹配,但我似乎无法找到它。

你能帮助我吗?我正在运行PostgreSQL 9.5.5。如果我需要提供更广泛的解释,请告诉我,这是我的第一个问题,所以我可能忽略了一些重要的事情。

我的触发器和函数代码如下:

CREATE OR REPLACE FUNCTION update_lastedit() RETURNS TRIGGER AS
$update_edit$
BEGIN
    UPDATE ovsoftware.person
    SET lastedit = now();
END;
$update_edit$
LANGUAGE plpgsql;

CREATE TRIGGER cert_edit_trigger
    BEFORE INSERT OR UPDATE ON ovsoftware.certifications
    FOR EACH ROW
    EXECUTE PROCEDURE update_lastedit();

确切错误:

SQL fout:

ERROR:  function update_lastedit() does not exist
In statement:

CREATE TRIGGER cert_edit_trigger
    BEFORE INSERT OR UPDATE ON ovsoftware.certifications
    FOR EACH ROW
    EXECUTE PROCEDURE update_lastedit();

1 个答案:

答案 0 :(得分:1)

解决方案是使用函数的完全限定名称,如下所示:ovsoftware.update_lastedit()。我不确定为什么会这样,因为在其他情况下我不需要这样做。 无论哪种方式,范围显然不包括ovsoftware架构,导致错误。