*** a/src/backend/executor/execQual.c
--- b/src/backend/executor/execQual.c
***************
*** 296,302 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  			ereport(ERROR,
  					(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  					 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 							i, MAXDIM)));
  
  		upper.indx[i++] = DatumGetInt32(ExecEvalExpr(eltstate,
  													 econtext,
--- 296,302 ----
  			ereport(ERROR,
  					(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  					 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 							i + 1, MAXDIM)));
  
  		upper.indx[i++] = DatumGetInt32(ExecEvalExpr(eltstate,
  													 econtext,
***************
*** 324,330 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  				ereport(ERROR,
  						(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  						 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 								i, MAXDIM)));
  
  			lower.indx[j++] = DatumGetInt32(ExecEvalExpr(eltstate,
  														 econtext,
--- 324,330 ----
  				ereport(ERROR,
  						(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  						 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 								j + 1, MAXDIM)));
  
  			lower.indx[j++] = DatumGetInt32(ExecEvalExpr(eltstate,
  														 econtext,
*** a/src/backend/utils/adt/arrayfuncs.c
--- b/src/backend/utils/adt/arrayfuncs.c
***************
*** 202,208 **** array_in(PG_FUNCTION_ARGS)
  			ereport(ERROR,
  					(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  					 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 							ndim, MAXDIM)));
  
  		for (q = p; isdigit((unsigned char) *q) || (*q == '-') || (*q == '+'); q++);
  		if (q == p)				/* no digits? */
--- 202,208 ----
  			ereport(ERROR,
  					(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  					 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 							ndim + 1, MAXDIM)));
  
  		for (q = p; isdigit((unsigned char) *q) || (*q == '-') || (*q == '+'); q++);
  		if (q == p)				/* no digits? */
***************
*** 481,487 **** ArrayCount(const char *str, int *dim, char typdelim)
  							ereport(ERROR,
  									(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  									 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 											nest_level, MAXDIM)));
  						temp[nest_level] = 0;
  						nest_level++;
  						if (ndim < nest_level)
--- 481,487 ----
  							ereport(ERROR,
  									(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
  									 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
! 											nest_level + 1, MAXDIM)));
  						temp[nest_level] = 0;
  						nest_level++;
  						if (ndim < nest_level)
