Замыкающие нули опускаются при вставке в postgres - PullRequest
0 голосов
/ 06 марта 2020

При вставке даты с миллисекундами часть, содержащая ноль, пропускается в PostgreSQL. Если он содержит ненулевую часть в дате, он будет правильно вставлен в БД.

Например: 2019-06-01 11:59:59:371Z это будет правильно вставить в БД, но когда я вставляю '2010-06-21 11:59:59:010Z', тогда он станет '2010-06-21 11:59:59:01Z' последним нулем часть пропущена.

Я использовал запрос

SELECT to_char(date, 'YYYY-MM-DD HH:MI:SS:MSZ') 
FROM table_name; 

, тогда я получу данные правильно, но это в строковом формате, и если я изменил на time.Time, то нулевая часть пропускается.

Любой метод принудительного хранения миллисекунд без пропуска нуля до postgres или любой метод для решения этой проблемы

2099-06-21T23:59:59.371Z -> 2099-06-21T23:59:59.371Z
2099-06-21T23:59:59.000Z -> 2099-06-21T23:59:59Z
2099-06-21T23:59:59.010Z -> 2099-06-21T23:59:59.01Z
2010-06-21T23:59:59.001Z -> 2010-06-21T23:59:59.001Z
2010-06-21T23:59:59.100Z -> 2010-06-21T23:59:59.1Z

1 Ответ

0 голосов
/ 06 марта 2020

Конечные нули за десятичным разделителем не имеют значения для точности числа.

Если ваше приложение ожидает определенного фиксированного количества цифр после десятичного разделителя, отформатируйте метку времени соответствующим образом с помощью функции to_char, когда вы запрашиваете таблицу.

Если вы хотите избежать разбрызгивания запросов с помощью to_char, определите представление таблицы, которое форматирует отметку времени в виде строки, и используйте это представление в ваших запросах.

Не храните временные метки в виде строк в таблице. Вы потеряете проверки действительности и арифметику даты c, и вы потеряете место для хранения.

...