jackc/pgx · error

cannot scan empty string into %T

Error message

cannot scan empty string into %T

What it means

Text bool scan plan got a zero-length, non-NULL source. An empty string cannot be interpreted as a PostgreSQL boolean, unlike valid representations like 't', 'true', '1'.

Solutions

  1. Store/emit a real boolean representation ('t','true','yes','1','f','false','no','0')
  2. Treat empty strings as NULL before scanning, if that matches your data
  3. Fix upstream data production that created empty boolean text
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/bool.go:273 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/06b9f48c51c7d67f. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/bool.go:273

	p, ok := (dst).(*bool)
	if !ok {
		return ErrScanTargetTypeChanged
	}

	*p = src[0] == 1

	return nil
}

type scanPlanTextAnyToBool struct{}

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

	if len(src) == 0 {
		return fmt.Errorf("cannot scan empty string into %T", dst)
	}

	p, ok := (dst).(*bool)
	if !ok {
		return ErrScanTargetTypeChanged
	}

	v, err := planTextToBool(src)
	if err != nil {
		return err
	}

	*p = v

	return nil
}

type scanPlanBinaryBoolToBoolScanner struct{}

View on GitHub (pinned to ec1a0befd2)