jackc/pgx · error

array element

Error message

array element %d: %w

What it means

While iterating binary array elements, the pgio reader hit a read error (truncated or malformed element data) at element index %d. The underlying error describes the exact reader failure; the array message ended early or is corrupt.

Solutions

  1. Inspect the wrapped reader error to confirm truncation vs. corruption
  2. Fail the scan and discard the malformed result
  3. If persistent, check for network issues or a non-PostgreSQL server/proxy mangling binary data
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/array_codec.go:296 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/063c85239da9e2ff. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/array_codec.go:296

	err = array.SetDimensions(arrayHeader.Dimensions)
	if err != nil {
		return err
	}

	if elementCount == 0 {
		return r.Finish()
	}

	elementScanPlan := c.ElementType.Codec.PlanScan(m, c.ElementType.OID, BinaryFormatCode, array.ScanIndex(0))
	if elementScanPlan == nil {
		elementScanPlan = m.PlanScan(c.ElementType.OID, BinaryFormatCode, array.ScanIndex(0))
	}

	for i := range elementCount {
		elem := array.ScanIndex(i)
		elemSrc, _ := r.Value()
		if err := r.Err(); err != nil {
			return fmt.Errorf("array element %d: %w", i, err)
		}
		err = elementScanPlan.Scan(elemSrc, elem)
		if err != nil {
			return fmt.Errorf("failed to scan array element %d: %w", i, err)
		}
	}

	return r.Finish()
}

func (c *ArrayCodec) decodeText(m *Map, arrayOID uint32, src []byte, array ArraySetter) error {
	uta, err := parseUntypedTextArray(string(src))
	if err != nil {
		return err
	}

	// The element loop below indexes the value sized by SetDimensions, so the
	// dimensions and the parsed elements must agree.

View on GitHub (pinned to ec1a0befd2)