jackc/pgx · error

float8

Error message

float8: %w

What it means

Wrapping error from the binary float8 scan plan: the payload was not exactly 8 bytes, so pgio.Uint64Exact failed. A float8 on the wire is a single uint64 bit pattern; any other length means corrupted data.

Solutions

  1. Treat as protocol/data corruption — verify the column type and connection integrity
  2. Check pgx/server version compatibility
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/float8.go:250 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/5f88ae320caa4c3b. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/float8.go:250

			return scanPlanTextAnyToFloat64Scanner{}
		case Int64Scanner:
			return scanPlanTextAnyToInt64Scanner{}
		}
	}

	return nil
}

type scanPlanBinaryFloat8ToFloat64 struct{}

func (scanPlanBinaryFloat8ToFloat64) Scan(src []byte, dst any) error {
	if src == nil {
		return fmt.Errorf("cannot scan NULL into %T", dst)
	}

	raw, err := pgio.Uint64Exact(src)
	if err != nil {
		return fmt.Errorf("float8: %w", err)
	}

	n := int64(raw)
	f := (dst).(*float64)
	*f = math.Float64frombits(uint64(n))

	return nil
}

type scanPlanBinaryFloat8ToFloat64Scanner struct{}

func (scanPlanBinaryFloat8ToFloat64Scanner) Scan(src []byte, dst any) error {
	s := (dst).(Float64Scanner)

	if src == nil {
		return s.ScanFloat64(Float8{})
	}

View on GitHub (pinned to ec1a0befd2)