W instrukcji podano wartości jako:
- Niska wartość:4713 pne
- Wysoka wartość:294276 AD
z zastrzeżeniem, jak zauważył Chris, że -infinity
jest również obsługiwany.
Zobacz notatkę później na tej samej stronie w instrukcji; powyższe jest prawdziwe tylko wtedy, gdy używasz całkowitych znaczników czasu , które są domyślne we wszystkich niejasno najnowszych wersjach PostgreSQL. W razie wątpliwości:
SHOW integer_datetimes;
powiem Ci. Jeśli zamiast tego używasz dat zmiennoprzecinkowych, uzyskasz większy zakres i mniejszą (nieliniową) precyzję. Każda próba programowego wypracowania minimum musi poradzić sobie z tym ograniczeniem.
PostgreSQL nie tylko pozwala rzutować zero na znacznik czasu, aby uzyskać minimalny możliwy znacznik czasu, ani nie miałoby to większego sensu, gdybyś używał zmiennoprzecinkowych dat i godzin. możesz użyj funkcji przeliczania daty julian, ale to daje epokę nie minimalny czas :
postgres=> select to_timestamp(0);
to_timestamp
------------------------
1970-01-01 08:00:00+08
(1 row)
ponieważ przyjmuje wartości ujemne. Można by pomyśleć, że podanie negatywnego maksinta zadziała, ale wyniki są zaskakujące do tego stopnia, że zastanawiam się, czy nie czai się tu zawijający błąd:
postgres=> select to_timestamp(-922337203685477);
to_timestamp
---------------------------------
294247-01-10 12:00:54.775808+08
(1 row)
postgres=> select to_timestamp(-92233720368547);
to_timestamp
---------------------------------
294247-01-10 12:00:54.775808+08
(1 row)
postgres=> select to_timestamp(-9223372036854);
to_timestamp
------------------------------
294247-01-10 12:00:55.552+08
(1 row)
postgres=> select to_timestamp(-922337203685);
ERROR: timestamp out of range
postgres=> select to_timestamp(-92233720368);
to_timestamp
---------------------------------
0954-03-26 09:50:36+07:43:24 BC
(1 row)
postgres=> select to_timestamp(-9223372036);
to_timestamp
------------------------------
1677-09-21 07:56:08+07:43:24
(1 row)
(Być może jest to związane z faktem, że to_timestamp przyjmuje podwójną wartość, mimo że znaczniki czasu są obecnie przechowywane jako liczby całkowite?).
Myślę, że najrozsądniej jest po prostu pozwolić, aby zakres znaczników czasowych był dowolnym znacznikiem czasowym, w którym nie pojawi się błąd. W końcu zakres prawidłowych znaczników czasu nie jest ciągły:
postgres=> SELECT TIMESTAMP '2000-02-29';
timestamp
---------------------
2000-02-29 00:00:00
(1 row)
postgres=> SELECT TIMESTAMP '2001-02-29';
ERROR: date/time field value out of range: "2001-02-29"
LINE 1: SELECT TIMESTAMP '2001-02-29';
więc nie można zakładać, że tylko dlatego, że wartość znajduje się między dwoma ważnymi znacznikami czasu, jest ona samoczynna.