jackc/pgx · error

unexpected trailing data

Error message

unexpected trailing data: %v

What it means

The range parsed successfully but non-whitespace bytes remain in the buffer after the closing bracket. This trailing-content guard fires last, so the whole literal was structurally valid yet contains extra data the parser refuses to ignore.

Solutions

  1. Strip any trailing garbage beyond the closing bracket
  2. Check for concatenated values caused by a formatting bug upstream
  3. Reject input that does not parse completely rather than silently ignoring the remainder
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/range.go:109 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/cb66506adf86f36f. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/range.go:109

		r, _, err = buf.ReadRune()
		if err != nil {
			return nil, fmt.Errorf("missing upper bound: %w", err)
		}
		switch r {
		case ')':
			utr.UpperType = Exclusive
		case ']':
			utr.UpperType = Inclusive
		default:
			return nil, fmt.Errorf("missing upper bound, instead got: %v", string(r))
		}
	}

	skipWhitespace(buf)

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

	return utr, nil
}

func rangeParseValue(buf *bytes.Buffer) (string, error) {
	r, _, err := buf.ReadRune()
	if err != nil {
		return "", err
	}
	if r == '"' {
		return rangeParseQuotedValue(buf)
	}
	buf.UnreadRune()

	s := &bytes.Buffer{}

	for {

View on GitHub (pinned to ec1a0befd2)