如何指定一个触发函数只在table中有记录时才执行?

How to specify a trigger function to execute only when there are records in a table?

我正在使用 postgres 10.9。我在插入后创建了一个触发器函数并在 table 上触发。现在当我插入一条记录时,它给我错误,因为最初 table

中没有数据

错误:控制到达触发过程的结尾,没有 RETURN

如何确保函数只在table中有记录时执行?

触发函数-

create or replace function delete_old_token()
returns trigger as
$body$
begin
delete from token where timestamp < NOW() - interval '1 day';
end;
$body$
language plpgsql;

触发器-

create trigger delete_token
after insert
on token
for each row
execute procedure delete_old_token();

有办法实现吗?

您的问题与空 table 无关,它是由无效的触发器函数引起的:您忘记了 return 语句。

当您将它用于 AFTER 触发器时,实际的 return 是无关紧要的,但您需要 return 一些东西。

create or replace function delete_old_token()
  returns trigger as
$body$
begin
  delete from token where timestamp < NOW() - interval '1 day';
  return null; --<<< here
end;
$body$
language plpgsql;