【发布时间】:2019-05-02 07:15:57
【问题描述】:
在我的程序中,每个表都有一列last_modified:
last_modified int8 DEFAULT (date_part('epoch'::text, now()::timestamp) * (1000)::double precision) NOT NULL
为了更新,我添加了一个触发器:
CREATE OR REPLACE FUNCTION sync_lastmodified() RETURNS trigger AS $$
BEGIN
NEW.last_modified := (date_part('epoch'::text, now()::timestamp) * (1000)::double precision);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER
sync_lastmodified
BEFORE UPDATE ON
ourtable
FOR EACH ROW EXECUTE PROCEDURE
sync_lastmodified();
他们应该将当前时间作为长值写入更新/插入时的last_modified 列。
但是,它并没有像我预期的那样工作。
为了重现该问题,我进行了更新并得到以下信息:
last_modified value equals 1543576224455 (Friday November 30, 2018 16:10:24 (pm) in time zone Asia/Tashkent (+05))
几乎同时我从 pgAdmin 运行函数 now:
SELECT now()
得到了结果:
2018-11-30 11:10:36.891426+05
为了在几秒钟内检查系统时间,我从终端运行 timedatectl status 并得到以下结果:
问题是为什么函数 now() 给出的时间是 5 小时 当我从触发器运行它或作为默认值时的区别 插入?
【问题讨论】:
-
由于这个问题,我在根据 last_modified 时间选择值时得到错误的结果。
标签: postgresql timestamp utc current-time