jackc/pgx · error

array has too many dimensions

Error message

array has too many dimensions: %d

What it means

A binary array header declared more than 6 dimensions, which exceeds PostgreSQL's maximum array dimensionality. The %d shows the claimed count; the data is rejected as malformed or corrupt.

Solutions

  1. Verify the array data was encoded correctly
  2. Check for data corruption in transit or storage
  3. Confirm the value is truly an array and not misinterpreted bytes
  4. Report if produced by a legitimate PostgreSQL server
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/array.go:55 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of jackc/pgx@ec1a0befd2 (2026-08-04). Data as JSON: /api/errors/f4111e4316daab9a. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/array.go:55

		elementCount *= int(d.Length)
	}

	if elementCount < 0 {
		return 0
	}

	return elementCount
}

func (dst *arrayHeader) DecodeBinary(r *pgio.Reader) error {
	// Each dimension is 8 bytes, which also bounds the Dimensions allocation below.
	numDims := r.Count(8)
	if err := r.Err(); err != nil {
		return fmt.Errorf("array header: %w", err)
	}

	if numDims > 6 {
		return fmt.Errorf("array has too many dimensions: %d", numDims)
	}

	dst.ContainsNull = r.Uint32() == 1
	dst.ElementOID = r.Uint32()

	dst.Dimensions = make([]ArrayDimension, numDims)
	for i := range dst.Dimensions {
		dst.Dimensions[i].Length = r.Int32()
		dst.Dimensions[i].LowerBound = r.Int32()
	}

	if err := r.Err(); err != nil {
		return fmt.Errorf("array header: %w", err)
	}
	return nil
}

func (src arrayHeader) EncodeBinary(buf []byte) []byte {

View on GitHub (pinned to ec1a0befd2)