jackc/pgx · error

multirange element

Error message

multirange element %d: %w

What it means

During binary multirange decoding, each element is read via a length-prefixed value from the reader. This wrapper annotates a reader-level failure with the element index, firing when the payload runs out or is malformed while reading element i's bytes.

Solutions

  1. Verify the binary multirange payload is complete and uncorrupted
  2. Use text format for multirange columns
  3. Report as a driver bug if the value came straight from PostgreSQL
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/multirange.go:233 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/2776d84d59495ee5. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/multirange.go:233

	err := multirange.SetLen(elementCount)
	if err != nil {
		return err
	}

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

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

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

	return r.Finish()
}

func (c *MultirangeCodec) decodeText(m *Map, multirangeOID uint32, src []byte, multirange MultirangeSetter) error {
	elements, err := parseUntypedTextMultirange(src)
	if err != nil {
		return err
	}

	err = multirange.SetLen(len(elements))
	if err != nil {

View on GitHub (pinned to ec1a0befd2)