Проблема с типом signed int при хранении unix timestamp

Как известно, в 2038 году будет такой момент, когда в типе данных int уже не получится хранить число секунд эпохи - с момента 1 января 1970 года. Проверить это можно SQL запросами. Не забудьте сделать резервную копию данных. Шутка 🙂 Вот так можно грубо проверить, что на указанную дату приходится переполнение типа signed int:
SELECT date_part('epoch',('2038-01-20'))::INT
Вы получите ошибку "integer out of range". С точностью до минуты я подобрал время переполнения типа (оговорка: при вычислении используется timestamptz, т.е. запросы корректны для моего часового пояса Europe/Moscow - для других надо подправлять количество часов при вычитании). Запрос
SELECT date_part('epoch',('2038-01-20')::timestamptz - INTERVAL '17 hour' - INTERVAL '46 minutes')::INT
еще выдает число секунд, а вот запрос
SELECT date_part('epoch',('2038-01-20')::timestamptz - INTERVAL '17 hour' - INTERVAL '45 minutes')::INT
уже опять-таки выдает ошибку "integer out of range".
You can leave a response, or trackback from your own site.

Leave a Reply