*** a/src/backend/utils/adt/formatting.c
--- b/src/backend/utils/adt/formatting.c
***************
*** 1726,1732 **** strdigits_len(char *str)
  
  #define AMPM_ERROR	ereport(ERROR, \
  							(errcode(ERRCODE_INVALID_DATETIME_FORMAT), \
! 							 errmsg("invalid AM/PM string")));
  
  /*
   * Set the date mode of a from-char conversion.
--- 1726,1732 ----
  
  #define AMPM_ERROR	ereport(ERROR, \
  							(errcode(ERRCODE_INVALID_DATETIME_FORMAT), \
! 							 errmsg("invalid AM/PM string for '%s'", s)));
  
  /*
   * Set the date mode of a from-char conversion.
***************
*** 2537,2543 **** DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
  				out->ms *= len == 1 ? 100 :
  					len == 2 ? 10 : 1;
  
! 				s += len + SKIP_THth(n->suffix);
  				break;
  			case DCH_US:			/* microsecond */
  				len = from_char_parse_int_len(&out->us, &s, 6, n);
--- 2537,2543 ----
  				out->ms *= len == 1 ? 100 :
  					len == 2 ? 10 : 1;
  
! 				s += SKIP_THth(n->suffix);
  				break;
  			case DCH_US:			/* microsecond */
  				len = from_char_parse_int_len(&out->us, &s, 6, n);
***************
*** 2548,2554 **** DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
  					len == 4 ? 100 :
  					len == 5 ? 10 : 1;
  
! 				s += len + SKIP_THth(n->suffix);
  				break;
  			case DCH_SSSS:
  				from_char_parse_int(&out->ssss, &s, n);
--- 2548,2554 ----
  					len == 4 ? 100 :
  					len == 5 ? 10 : 1;
  
! 				s += SKIP_THth(n->suffix);
  				break;
  			case DCH_SSSS:
  				from_char_parse_int(&out->ssss, &s, n);
