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

使用PostgreSQL创建触发器函数时出错?,postgresql,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 ro

我正在创建一个触发函数来自动删除记录,如果数据超过时间限制

这是密码-

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函数delete\u old\u rows()返回触发器
语言plpgsql
作为$$
声明
行计数int;
开始
从tablename1中删除,其中时间戳
我得到以下错误- 错误:“创建”处或附近出现语法错误
第5行:$BODY$CREATE函数delete_old_rows()返回trigger。

当trigger函数本身看起来像一个表时,您可能需要仔细查看一下

返回NULL

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

在返回null以向触发器发出信号之前激发的行级触发器 经理跳过此行的其余操作(即。, 不会触发后续触发器,插入/更新/删除会触发后续触发器 不在此行中出现)。如果返回非null值,则 操作以该行值进行。返回行值 与“新建”的原始值不同,将更改将显示的行 插入或更新。因此,如果触发器函数希望 在不改变行值的情况下触发操作正常成功, 必须返回新的(或与其相等的值)。将行改为 若要存储,则可以直接在新的和 返回修改后的新记录,或生成完整的新记录/行 返回。对于删除时的before触发器,返回值 没有直接影响,但必须为非null才能允许触发器 继续行动。注意,在DELETE触发器中NEW为null,因此 返回通常是不明智的。DELETE中的常用成语 触发器是返回旧的


那就是-你用哪个工具来运行它?您确切的Postgres版本是什么(
select version();
会告诉您)11.5版本…您应该使用另一个客户端,该客户端不会以美元引号分号拆分SQL字符串。我使用的是PGadmin4,您能解释一下吗?您可能有一些不可见的字符导致了这种情况。复制并粘贴到记事本++之类的文本编辑器中,将其设置为显示所有字符,然后查看是否有任何可疑之处。这种情况可能会发生,尤其是当您从带有格式化字符的网页或文档中复制/粘贴了其中的任何部分时。因此,将“returnnull”改为“returnold”非常基本,我的评论/回答只处理了returnnull语句,没有其他内容。看看其他的评论。尤其是404的评论。