Как обратиться к moddatetime, очевидно, в обход точности столбца? - PullRequest
0 голосов
/ 22 марта 2019

У нас есть база данных, где каждая временная метка определяется как 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 дробными цифрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...