jackc/pgx · error

cannot scan NULL into *float64

Error message

cannot scan NULL into *float64

What it means

ScanInt64 was given a NULL Int8 while scanning into *float64, which cannot represent NULL. Null guard in float64Wrapper's conversion path; the column value is NULL but the Go destination is a non-nullable float64.

Solutions

  1. Use COALESCE in the query to supply a default
  2. Scan into pgtype.Float8 or *float64 pointer to handle NULLs
  3. Ensure the queried column is NOT NULL
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/builtin_wrappers.go:351 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/4e6f6981c96cf7aa. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/builtin_wrappers.go:351

		return fmt.Errorf("cannot scan NULL into *float32")
	}

	*w = float32Wrapper(v.Float64)

	return nil
}

func (w float32Wrapper) Float64Value() (Float8, error) {
	return Float8{Float64: float64(w), Valid: true}, nil
}

type float64Wrapper float64

func (w float64Wrapper) SkipUnderlyingTypePlan() {}

func (w *float64Wrapper) ScanInt64(v Int8) error {
	if !v.Valid {
		return fmt.Errorf("cannot scan NULL into *float64")
	}

	*w = float64Wrapper(v.Int64)

	return nil
}

func (w float64Wrapper) Int64Value() (Int8, error) {
	if w > math.MaxInt64 {
		return Int8{}, fmt.Errorf("%f is greater than maximum value for int64", w)
	}

	return Int8{Int64: int64(w), Valid: true}, nil
}

func (w *float64Wrapper) ScanFloat64(v Float8) error {
	if !v.Valid {
		return fmt.Errorf("cannot scan NULL into *float64")

View on GitHub (pinned to ec1a0befd2)