В моей программе у каждой таблицы есть столбец 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 часов при запуске из триггера или в качестве значения по умолчанию при вставке?