diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 81b76314de924ce2cc29f4075b6b68bedd8b02b0..9b4c012a63c4dc937c1c4c260560744a6ba69810 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -773,12 +773,8 @@ float8_timestamptz(PG_FUNCTION_ARGS) { /* Out of range? */ if (seconds < - (float8) SECS_PER_DAY * (DATETIME_MIN_JULIAN - UNIX_EPOCH_JDATE)) - ereport(ERROR, - (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), - errmsg("timestamp out of range: \"%g\"", seconds))); - - if (seconds >= + (float8) SECS_PER_DAY * (DATETIME_MIN_JULIAN - UNIX_EPOCH_JDATE) + || seconds >= (float8) SECS_PER_DAY * (TIMESTAMP_END_JULIAN - UNIX_EPOCH_JDATE)) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), @@ -788,7 +784,8 @@ float8_timestamptz(PG_FUNCTION_ARGS) seconds -= ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY); #ifdef HAVE_INT64_TIMESTAMP - result = rint(seconds * USECS_PER_SEC); + seconds = rint(seconds * USECS_PER_SEC); + result = (int64) seconds; #else result = seconds; #endif @@ -1624,9 +1621,10 @@ make_interval(PG_FUNCTION_ARGS) result->day = weeks * 7 + days; #ifdef HAVE_INT64_TIMESTAMP + secs = rint(secs * USECS_PER_SEC); result->time = hours * ((int64) SECS_PER_HOUR * USECS_PER_SEC) + mins * ((int64) SECS_PER_MINUTE * USECS_PER_SEC) + - (int64) rint(secs * USECS_PER_SEC); + (int64) secs; #else result->time = hours * (double) SECS_PER_HOUR + mins * (double) SECS_PER_MINUTE +