diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
new file mode 100644
index f521811..4bdfe73
*** a/src/backend/utils/adt/arrayfuncs.c
--- b/src/backend/utils/adt/arrayfuncs.c
*************** hash_array(PG_FUNCTION_ARGS)
*** 3533,3539 ****
  	int			ndims = ARR_NDIM(array);
  	int		   *dims = ARR_DIMS(array);
  	Oid			element_type = ARR_ELEMTYPE(array);
! 	uint32		result = 0;
  	int			nitems;
  	TypeCacheEntry *typentry;
  	int			typlen;
--- 3533,3539 ----
  	int			ndims = ARR_NDIM(array);
  	int		   *dims = ARR_DIMS(array);
  	Oid			element_type = ARR_ELEMTYPE(array);
! 	uint32		result = 1;
  	int			nitems;
  	TypeCacheEntry *typentry;
  	int			typlen;
*************** hash_array(PG_FUNCTION_ARGS)
*** 3617,3627 ****
  		}
  
  		/*
! 		 * Combine hash values of successive elements by rotating the previous
! 		 * value left 1 bit, then XOR'ing in the new element's hash value.
  		 */
! 		result = (result << 1) | (result >> 31);
! 		result ^= elthash;
  	}
  
  	/* Avoid leaking memory when handed toasted input. */
--- 3617,3633 ----
  		}
  
  		/*
! 		 * Combine hash values of successive elements by multiplying the
! 		 * current value by 31 and adding on the new element's hash value.
! 		 *
! 		 * The result is a sum in which each element's hash value is
! 		 * multiplied by a different power of 31. This is modulo 2^32
! 		 * arithmetic, and the powers of 31 modulo 2^32 form a cyclic group of
! 		 * order 2^27. So for arrays of up to 2^27 elements, each element's
! 		 * hash value is multiplied by a different (odd) number, resulting in
! 		 * a good mixing of all the elements' hash values.
  		 */
! 		result = (result << 5) - result + elthash;
  	}
  
  	/* Avoid leaking memory when handed toasted input. */
