*** a/src/backend/utils/adt/datetime.c
--- b/src/backend/utils/adt/datetime.c
***************
*** 2987,2993 **** DecodeInterval(char **field, int *ftype, int nf, int range,
  
  					case DTK_MILLISEC:
  #ifdef HAVE_INT64_TIMESTAMP
! 						*fsec += rint((val + fval) * 1000);
  #else
  						*fsec += (val + fval) * 1e-3;
  #endif
--- 2987,3001 ----
  
  					case DTK_MILLISEC:
  #ifdef HAVE_INT64_TIMESTAMP
! 						/*
! 						 * fval is unused or re-initialized if it is
! 						 * needed again */
! 						fval = rint((val + fval) * 1000);
! 
! 						if (fval < INT_MIN || fval > INT_MAX)
! 							return DTERR_FIELD_OVERFLOW;
! 
! 						*fsec += fval;
  #else
  						*fsec += (val + fval) * 1e-3;
  #endif
