jackc/pgx · error

invalid multirange value

Error message

invalid multirange value: %w

What it means

In textual multirange parsing, once the parser sees the start of an element it hands the buffer to parseRange to read one range literal. This wrapper fires when that nested range parse fails — one of the members between the braces is not a valid range text like '[1,2)'.

Solutions

  1. Inspect the wrapped error to identify which member range is malformed
  2. Store ranges in canonical '[a,b)' / '(a,b]' / 'empty' text forms
  3. Validate multirange strings before insertion
Defensive patterns

Strategy: try-catch

When it happens

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

Appendix: source

Thrown at pgtype/multirange.go:363

		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)

	if buf.Len() > 0 {
		return nil, fmt.Errorf("unexpected trailing data: %v", buf.String())
	}

	return elements, nil
}

func parseRange(buf *bytes.Buffer) (string, error) {
	s := &bytes.Buffer{}

	boundSepRead := false

View on GitHub (pinned to ec1a0befd2)