【问题标题】:How to specify a trigger function to execute only when there are records in a table?如何指定仅当表中有记录时才执行触发函数?
【发布时间】:2019-07-23 10:26:16
【问题描述】:

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

错误:控制到达触发过程结束而没有返回

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

触发功能-

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();

有没有办法做到这一点?

【问题讨论】:

    标签: postgresql database-trigger


    【解决方案1】:

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

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

    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;
    

    【讨论】:

    • 哦,是的!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2015-09-09
    • 2019-11-22
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多