在记录创建触发器上为时间戳添加时间间隔

时间:2018-09-19 22:19:48

标签: postgresql

我试图做表面上看似简单的事情。我有一个表,其中包含字段expires_at(时间戳)ttl(整数)和name(文本)

ttl的编号为86400。我想将expires_at字段设置为当前时间戳+ ttl。

这是我的触发器

CREATE FUNCTION public.set_expires() RETURNS trigger
    LANGUAGE plpgsql
    AS $_$
    BEGIN
      NEW.expires_at := CURRENT_TIMESTAMP + (NEW.ttl || ' seconds')::INTERVAL;
      RETURN NEW;
    END;
  $_$;

但是,运行时,我在expires_at字段中获得了当前时间。

如果我将触发器更改为

NEW.expires_at := CURRENT_TIMESTAMP + (86400 || ' seconds')::INTERVAL;

然后正确设置expires_at

这意味着未设置NEW.ttl,但如果我添加

NEW.name:=NEW.ttl;

对于触发器,name设置为86400。因此,对于我在这里做错了什么,我有些困惑,不胜感激;)

1 个答案:

答案 0 :(得分:0)

虽然您的版本应该可以正常工作(如@NickBarnes所示),也许您可​​以尝试将语法更改为

NEW.expires_at := CURRENT_TIMESTAMP + NEW.ttl * interval '1 second';
相关问题