Как получить Epoch с точностью до микросекунды из столбца меток времени в Postgres? - PullRequest
0 голосов
/ 08 мая 2018

В Postgres я пытаюсь создать поле метки времени с точностью до микросекунды.

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

Пример

CREATE TABLE date_test (datetime timestamp(6) WITH TIME ZONE);

INSERT INTO date_test VALUES(TO_TIMESTAMP(1525745241.879112));

SELECT datetime FROM date_test; //returns 2018-05-08 12:07:21.879112+10
SELECT EXTRACT(epoch FROM datetime) from date_test; //returns 1525745241.87911

В чем причина потери последней цифры? Является ли запрос по своей сути преобразованным в плавающую точку и теряющим точность? Есть ли какой-нибудь простой способ хранить даты с точностью до микросекунды в Postgres?

1 Ответ

0 голосов
/ 08 мая 2018

Это некрасиво, но на макушке головы:

t=# select extract(epoch from TO_TIMESTAMP(1525745241.879112) - '1000000000 seconds'::interval)::numeric(20,6) + 1000000000;
     ?column?
-------------------
 1525745241.879112
(1 row)

https://www.postgresql.org/docs/current/static/functions-datetime.html extract возвращает double precision , что составляет 15 точность десятичных цифр, поэтому микросекунды просто не подходят ...

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