jackc/pgx · error

invalid array

Error message

invalid array: %w

What it means

While parsing the textual multirange representation, the parser must first read an opening rune. This wrapper fires when the buffer is empty or reading fails before the expected '{' is even seen — the text is too short to be a multirange at all. (The 'invalid array' prefix is a slight misnomer reused from array parsing.)

Solutions

  1. Verify the stored text is a valid multirange literal like '{[1,2), [5,6)}'
  2. Fix any custom code that wrote an empty or truncated string
  3. Use binary format for the column
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/multirange.go:341 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/755ddf4ffe404982. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/multirange.go:341

	if src == nil {
		return nil, nil
	}

	var multirange Multirange[Range[any]]
	err := m.PlanScan(oid, format, &multirange).Scan(src, &multirange)
	return multirange, err
}

func parseUntypedTextMultirange(src []byte) ([]string, error) {
	elements := make([]string, 0)

	buf := bytes.NewBuffer(src)

	skipWhitespace(buf)

	r, _, err := buf.ReadRune()
	if err != nil {
		return nil, fmt.Errorf("invalid array: %w", err)
	}

	if r != '{' {
		return nil, fmt.Errorf("invalid multirange, expected '{' got %v", r)
	}

parseValueLoop:
	for {
		r, _, err = buf.ReadRune()
		if err != nil {
			return nil, fmt.Errorf("invalid multirange: %w", err)
		}

		switch r {
		case ',': // skip range separator
		case '}':
			break parseValueLoop
		default:

View on GitHub (pinned to ec1a0befd2)