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
- Verify the array data was encoded correctly
- Check for data corruption in transit or storage
- Confirm the value is truly an array and not misinterpreted bytes
- 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)