golang-migrate/migrate · error
bad parameter
Error message
bad parameter
What it means
ErrBadConfig (message "bad parameter") is the rqlite driver's generic configuration error. parseUrl and parseConfigFromQuery wrap it with %w for specific failures: a non-rqlite URL scheme, an x-migrations-table query param starting with sqlite_, or a non-boolean x-connect-insecure value. Because it is always wrapped, use errors.Is(err, rqlite.ErrBadConfig) to detect it and read the wrapper text for the exact cause.
Source
Thrown at database/rqlite/rqlite.go:33
)
func init() {
database.Register("rqlite", &Rqlite{})
}
const (
// DefaultMigrationsTable defines the default rqlite migrations table
DefaultMigrationsTable = "schema_migrations"
// DefaultConnectInsecure defines the default setting for connect insecure
DefaultConnectInsecure = false
)
// ErrNilConfig is returned if no configuration was passed to WithInstance
var ErrNilConfig = fmt.Errorf("no config")
// ErrBadConfig is returned if configuration was invalid
var ErrBadConfig = fmt.Errorf("bad parameter")
// Config defines the driver configuration
type Config struct {
// ConnectInsecure sets whether the connection uses TLS. Ineffectual when using WithInstance
ConnectInsecure bool
// MigrationsTable configures the migrations table name
MigrationsTable string
}
type Rqlite struct {
db *gorqlite.Connection
isLocked atomic.Bool
config *Config
}
// WithInstance creates a rqlite database driver with an existing gorqlite database connection
// and a Config structView on GitHub (pinned to 01a9643f14)
Solutions
- Fix the specific part named in the wrapped error text: scheme, x-migrations-table, or x-connect-insecure
- Use scheme rqlite (or rqlites for TLS) in the URL — Open adapts it to http/https internally
- Choose a migrations table name that does not start with sqlite_
- Use a value strconv.ParseBool accepts for x-connect-insecure: 1/t/T/TRUE/true/True/0/f/F/FALSE/false/False
- In Go code, branch on errors.Is(err, rqlite.ErrBadConfig) to report a config problem rather than a connection problem
Example fix
// before url := "https://localhost:4001/db?x-connect-insecure=yes" // after url := "rqlite://localhost:4001/db?x-connect-insecure=true"
Defensive patterns
Strategy: validation
Validate before calling
u, err := url.Parse(dsn)
if err != nil { return err }
if u.Scheme != "rqlite" { return fmt.Errorf("scheme must be rqlite, got %q", u.Scheme) }
q := u.Query()
if t := q.Get("x-migrations-table"); strings.HasPrefix(t, "sqlite_") { return fmt.Errorf("x-migrations-table cannot start with sqlite_") }
if v := q.Get("x-connect-insecure"); v != "" {
if _, err := strconv.ParseBool(v); err != nil { return fmt.Errorf("x-connect-insecure must be a Go bool") }
} Try / catch
if err != nil {
if errors.Is(err, rqlite.ErrBadConfig) {
log.Fatalf("rqlite driver misconfiguration: %v", err)
}
return err
} Prevention
- Always use the rqlite:// scheme in DSNs, never http(s)
- Never name migrations tables with a sqlite_ prefix in this driver
- Only use Go strconv.ParseBool-accepted literals for boolean query params
- Detect this family with errors.Is(err, rqlite.ErrBadConfig)
When it happens
Trigger: Opening rqlite://... with the wrong scheme; passing x-migrations-table=sqlite_foo in the URL query; passing x-connect-insecure=yes/no-on-off-nonbool (anything strconv.ParseBool rejects, e.g. "yes" or "2").
Common situations: Reusing a connection URL from an http/https-based client and forgetting the scheme must be exactly rqlite; copying SQLite migration table naming conventions (sqlite_*) into rqlite; hand-writing the DSN with an unchecked boolean param.
Related errors
- no config
- bad scheme: %w
- invalid value for x-migrations-table: %w
- invalid value for x-connect-insecure: %w
- no schema/database name
AI-assisted analysis of golang-migrate/migrate@01a9643f14 (2026-09-02).
Data as JSON: /api/errors/8eb276e5f8ce1de1.
Report an issue: GitHub.