diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 811033cb59ef9c3e68792b61499e6e0ab1f814b5..4007cc2d207b399a17f24a09c3ebc4cae0f0ebce 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1,5 +1,5 @@ @@ -1360,7 +1360,7 @@ SELECT b, char_length(b) FROM test2; 4 bytes dates only 4713 BC - 32767 AD + 5874897 AD 1 day diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 619a099b654d09e4ec3355a81a16826f72cda2ba..c070f00cf61470a8a99cc0392248dcd55618d327 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.122 2005/10/15 02:49:28 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.123 2006/02/09 03:39:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -97,6 +97,11 @@ date_in(PG_FUNCTION_ARGS) break; } + if (!IS_VALID_JULIAN(tm->tm_year, tm->tm_mon, tm->tm_mday)) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("date out of range: \"%s\"", str))); + date = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE; PG_RETURN_DATEADT(date);