私のプログラムでは、すべてのテーブルに列があります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))
ほぼ同時にnow
、pgAdmin から関数を実行します。
SELECT now()
そして結果を得ました:
2018-11-30 11:10:36.891426+05
数秒以内にシステム時間を確認するためにtimedatectl status
、ターミナルから実行したところ、次の結果が得られました。
問題は、関数 now() が、トリガーから実行したとき、または挿入時にデフォルト値として実行したときに、なぜ 5 時間の差を与えるのかということです。