У нас есть база данных, где каждая временная метка определяется как timestamp(3) with time zone
. Мы заметили, что в некоторых случаях мы возвращали метки времени с 6 дробными цифрами, а не с 3. Я проследил, чтобы это происходило только в столбцах update_date
, и только если оно обновлялось с помощью moddatetime
.
У кого-нибудь есть опыт с изящным исправлением этого?
Я тестировал ручные вставки, обновления, буквально, с этого момента () и т. Д., И ни один из них не вызывает проблемы.
Я знаю, что могу исправить это, приведя к ::timestamptz(3)
, где бы мы ни использовали это поле, но это добавит много беспорядка, плюс я беспокоюсь о производительности, если нам нужно будет ... WHERE date_trunc('milliseconds', update_date) > other_tz3_value
.
Лучшее, что я смог придумать, - это изменить индекс, который у нас есть на update_date, на функциональный индекс на date_trunc('milliseconds', update_date)
, но, опять же, это кажется неуклюжим.
В рассматриваемых таблицах есть триггер, например:
CREATE TRIGGER mytrigger
BEFORE UPDATE ON mytable
FOR EACH ROW EXECUTE PROCEDURE moddatetime(update_date);
Я ожидал бы, что независимо от того, как значение вставлено в поле timestamp (3), оно всегда возвращается с не более чем 3 дробными цифрами.