Сохранение типа DateTime в БД PostgreSQL (C#)

Доброго времени суток!

Согласно официальной информации из вики по PostgreSQL точность хранения времени в базе составляет 1 microsecond. Но .net хранит наносекунды (100 nanoseconds). Из-за этого получается, что при сохранении типа данных DateTime в timespan (или просто в time) теряется 1 знак.

Если поиск данных с фильтрацией проводить непосредственно ОРМ, то есть шансы, что она сгладит данный факт и найдёт. Но если сначала вытащить данные и затем искать, то разумеется ничего не найдём (т.к. начальные данные изменились).

Возникает вопрос, кто-то сталкивался с данной особенностью и как решал?

Видятся следующие варианты решения проблемы:

  1. Хранить непосредственно тики (datetime -> long), но придётся каждый раз конвертировать из одного в другое + будет сложно писать запросы непосредственно в sql
  2. Уменьшать точность временной метки самостоятельно в приложении (например при создании объекта сразу же указывать не DateTime.Now, а DateTime.Now / 1000 * 1000)
  3. При поиске и сравнении добавлять погрешность

Существуют ли более качественные решения проблемы?


Ответы (0 шт):