如何指定一个触发函数只在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;
我正在使用 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;