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
- Inspect the wrapped error to identify which member range is malformed
- Store ranges in canonical '[a,b)' / '(a,b]' / 'empty' text forms
- 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 := falseView on GitHub (pinned to ec1a0befd2)