*** a/src/backend/access/common/heaptuple.c
--- b/src/backend/access/common/heaptuple.c
***************
*** 863,868 **** heap_form_tuple(TupleDesc tupleDescriptor,
--- 863,869 ----
  				data_len;
  	int			hoff;
  	bool		hasnull = false;
+ 	bool		require_max_align = false;
  	Form_pg_attribute *att = tupleDescriptor->attrs;
  	int			numberOfAttributes = tupleDescriptor->natts;
  	int			i;
***************
*** 886,891 **** heap_form_tuple(TupleDesc tupleDescriptor,
--- 887,895 ----
  	 */
  	for (i = 0; i < numberOfAttributes; i++)
  	{
+ 		if (att[i]->attalign == 'd')
+ 			require_max_align = true;        
+ 
  		if (isnull[i])
  			hasnull = true;
  		else if (att[i]->attlen == -1 &&
***************
*** 907,916 **** heap_form_tuple(TupleDesc tupleDescriptor,
  	if (hasnull)
  		len += BITMAPLEN(numberOfAttributes);
  
! 	if (tupleDescriptor->tdhasoid)
  		len += sizeof(Oid);
  
! 	hoff = len = MAXALIGN(len); /* align user data safely */
  
  	data_len = heap_compute_data_size(tupleDescriptor, values, isnull);
  
--- 911,925 ----
  	if (hasnull)
  		len += BITMAPLEN(numberOfAttributes);
  
! 	if (tupleDescriptor->tdhasoid) {
  		len += sizeof(Oid);
+ 		require_max_align = true;
+ 	}
  
! 	if (require_max_align == true)
! 		hoff = len = MAXALIGN(len); /* align user data safely */
! 	else
! 		hoff = len = INTALIGN(len); /* align user data safely */
  
  	data_len = heap_compute_data_size(tupleDescriptor, values, isnull);
  