jackc/pgx · error

invalid multirange

Error message

invalid multirange: %w

What it means

Inside the element loop of textual multirange parsing, each iteration must read a rune to decide what comes next (separator, terminator, or a range value). This wrapper fires when that read fails — the buffer ends prematurely, e.g. a missing closing '}' so the loop hits EOF while still expecting content.

Solutions

  1. Ensure the multirange literal is properly closed with '}'
  2. Fix truncated or hand-built multirange strings before storage
  3. Use binary format for the column
Defensive patterns

Strategy: validation

When it happens

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

Appendix: source

Thrown at pgtype/multirange.go:352

	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:
			buf.UnreadRune()
			value, err := parseRange(buf)
			if err != nil {
				return nil, fmt.Errorf("invalid multirange value: %w", err)
			}
			elements = append(elements, value)
		}
	}

	skipWhitespace(buf)

View on GitHub (pinned to ec1a0befd2)