Function PostgreSQL函数和触发器

Function PostgreSQL函数和触发器,function,postgresql,stored-procedures,triggers,return,Function,Postgresql,Stored Procedures,Triggers,Return,我正在尝试函数和触发器int postgreSQL,但是我遇到了一个问题,当函数被触发时,它给了我一个错误 错误:控制到达触发过程的末尾而没有返回 这个特殊的过程只是执行一个insert into命令,所以我不明白为什么它需要返回 以下是脚本: CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ BEGIN insert into Audit values('k',124,'l');

我正在尝试函数和触发器int postgreSQL,但是我遇到了一个问题,当函数被触发时,它给了我一个错误

错误:控制到达触发过程的末尾而没有返回

这个特殊的过程只是执行一个insert into命令,所以我不明白为什么它需要返回

以下是脚本:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN
    insert into Audit values('k',124,'l');
END;
$tree_stamp$
LANGUAGE plpgsql;

create trigger forest_aud_ins after insert on forest
for each row execute procedure forest_aud_func()

insert into forest values('Blue',1600,'Malta','Health Ltd')

错误消息会告诉您所有这些。您需要从触发器函数返回:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN
    insert into Audit values('k',124,'l');
    return new;
END;
$tree_stamp$
LANGUAGE plpgsql;
发件人:


触发器函数必须返回NULL或记录/行值,该值与触发触发器的表的结构完全相同。

好的,谢谢,正如您所说的,现在它给了我这个错误:错误:重复的键值违反了唯一约束“audit\u pk”详细信息:key(au\u code)=(124)已经存在。我在表中打了勾,但124还不存在任何想法?@Karl:显然你在
audit
表上有一个主键,插入审计值时违反了该主键。这个问题与写入触发器无关。插入到林值('Blue',1600,'Malta','Health Ltd')是我插入的内容,这将导致插入到审计值('k',124,'l')的触发器插入@卡尔:PK问题是另外一个问题,可能应该是另一个问题。另外,在使用insert时,您确实应该指定列(
insert into audit(…)值(…)
)。从触发器函数返回的内容是否重要?这会影响INSERT/DELETE/UPDATE命令的结果吗,还是可以从所有触发器函数返回null?