select extract(epoch from my_timestamp)
Возвращает время в секундах. Тем не менее, это десятичное число с долями секунды после десятичной точки. Подробнее о точности читайте ниже.
Для миллис, используйте:
select extract(epoch from my_timestamp)*1000
Тест:
select my_date,
extract(epoch from my_date)*interval'1s'+'epoch'::timestamp at time zone 'GMT'
Примечание по точности
extract
возвращает число «двойной точности», которое соответствует 15 цифрам в Postgres. Это означает, что около 2016 года (как я это пишу) фактическая точность составляет 10 микросекунд. Обратите внимание, как округляется последняя цифра:
select extract('epoch' from '2016-09-20T11:22:33.456789Z'::timestamp);
date_part
------------------
1474370553.45679
(1 row)
Для таких дат, как 270 лет в будущем, этот тип данных сможет представлять точность только в 100 микросекунд. Это выглядит как приличная точность с точки зрения 2016 года, и я думаю, что все может немного измениться, прежде чем мы достигнем этого года.
select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
date_part
------------------
10120936953.4568
(1 row)
В любом случае, он будет продолжать нормально работать с точностью миллисекунда .