使用PostgreSQL创建触发器函数时出错



我正在创建一个触发器函数,以便在数据超过时间限制时自动删除记录。

这是代码-

CREATE FUNCTION delete_old_rows() RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
row_count int;
BEGIN
DELETE FROM tablename1 WHERE timestamp < NOW() - INTERVAL '1 day';
IF found THEN
GET DIAGNOSTICS row_count = ROW_COUNT;
RAISE NOTICE 'DELETEd % row(s) FROM tablename1', row_count;
END IF;
RETURN NULL;
END;
$$;

我收到以下错误-错误:"CREATE"处或附近有语法错误第5行:作为$BODY$CREATE FUNCTION delete_old_rows((返回触发器。

虽然触发器函数本身看起来很像,但您可能想对进行一个很好的了解

返回NULL;

因为你没有发布实际的触发器。从文档

BEFORE触发的行级触发器可以返回null以向触发器发出信号管理器跳过该行的其余操作(即。,后续触发器不会被激发,而INSERT/UPDATE/DELETE会对于此行不发生(。如果返回非null值,则操作继续使用该行值。返回行值与NEW的原始值不同,将更改插入或更新。因此,如果触发器函数想要触发动作在不改变行值的情况下正常成功,NEW(或与其相等的值(必须返回。将行更改为可以直接替换NEW中的单个值返回修改后的NEW,或生成一个完整的新记录/行回来在DELETE上的before触发器的情况下,返回的值没有直接影响,但必须为非null才能允许触发器要继续的操作。注意,DELETE触发器中的NEW为null,因此返回通常是不明智的。DELETE中常用的习语触发器是返回OLD。

最新更新