jackc/pgx · error
bad interval format
Error message
bad interval format
What it means
Parsing the interval text failed because the scalar preceding a unit keyword (e.g. before 'year', 'mon', 'day') is not a valid integer. strconv.ParseInt rejected parts[i]; the malformed interval string is the faulting input.
Solutions
- Fix the interval literal to PostgreSQL syntax like '1 year 2 mons 3 days 04:05:06'
- Let PostgreSQL or pgtype produce the interval text rather than building it ad hoc
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pgtype/interval.go:214 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/f30ec0e10e9c70bb.
Report an issue: GitHub.
Appendix: source
Thrown at pgtype/interval.go:214
type scanPlanTextAnyToIntervalScanner struct{}
func (scanPlanTextAnyToIntervalScanner) Scan(src []byte, dst any) error {
scanner := (dst).(IntervalScanner)
if src == nil {
return scanner.ScanInterval(Interval{})
}
var microseconds int64
var days int32
var months int32
parts := strings.Split(string(src), " ")
for i := 0; i < len(parts)-1; i += 2 {
scalar, err := strconv.ParseInt(parts[i], 10, 64)
if err != nil {
return fmt.Errorf("bad interval format")
}
switch parts[i+1] {
case "year", "years":
months += int32(scalar * 12)
case "mon", "mons":
months += int32(scalar)
case "day", "days":
days = int32(scalar)
default:
return fmt.Errorf("bad interval format: %q", parts[i+1])
}
}
if len(parts)%2 == 1 {
timeParts := strings.SplitN(parts[len(parts)-1], ":", 3)
if len(timeParts) != 3 {
return fmt.Errorf("bad interval format")View on GitHub (pinned to ec1a0befd2)