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
- Verify the stored text is a valid multirange literal like '{[1,2), [5,6)}'
- Fix any custom code that wrote an empty or truncated string
- 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)