golang-migrate/migrate · error

no config

Error message

no config

What it means

ErrNilConfig (message "no config") is returned by the Snowflake driver's WithInstance/WithConnection (declared at snowflake.go:27) when the *snowflake.Config argument is nil. The driver reads fields such as MigrationsTable, DatabaseName and Schema from the config pointer, so a nil config is rejected immediately. This is a caller-side programming error, not a connection failure.

Source

Thrown at database/snowflake/snowflake.go:27

	nurl "net/url"
	"strconv"
	"strings"
	"sync/atomic"

	"github.com/golang-migrate/migrate/v4/database"
	"github.com/lib/pq"
	sf "github.com/snowflakedb/gosnowflake"
)

func init() {
	db := Snowflake{}
	database.Register("snowflake", &db)
}

var DefaultMigrationsTable = "schema_migrations"

var (
	ErrNilConfig          = fmt.Errorf("no config")
	ErrNoDatabaseName     = fmt.Errorf("no database name")
	ErrNoPassword         = fmt.Errorf("no password")
	ErrNoSchema           = fmt.Errorf("no schema")
	ErrNoSchemaOrDatabase = fmt.Errorf("no schema/database name")
)

type Config struct {
	MigrationsTable string
	DatabaseName    string
}

type Snowflake struct {
	isLocked atomic.Bool
	conn     *sql.Conn
	db       *sql.DB

	// Open and WithInstance need to guarantee that config is never nil
	config *Config

View on GitHub (pinned to 01a9643f14)

Solutions

  1. Pass a non-nil &snowflake.Config{} (empty is valid; fields like DatabaseName/Schema are populated via Open)
  2. Audit any helper that builds the config so it cannot return nil on the happy path
  3. Remember each driver declares its own ErrNilConfig; match errors.Is against database/snowflake.ErrNilConfig

Example fix

// before
var cfg *snowflake.Config
drv, err := snowflake.WithInstance(db, cfg)
// after
cfg := &snowflake.Config{MigrationsTable: "schema_migrations", DatabaseName: db, SchemaName: schema}
drv, err := snowflake.WithInstance(db, cfg)
Defensive patterns

Strategy: validation

Validate before calling

if cfg == nil {
    return nil, fmt.Errorf("snowflake: config must be provided")
}
drv, err := snowflake.WithInstance(db, cfg)

Type guard

func hasSnowflakeConfig(cfg *snowflake.Config) bool { return cfg != nil }

Prevention

When it happens

Trigger: Calling snowflake.WithInstance(db, nil) or snowflake.WithConnection(conn, nil) instead of &snowflake.Config{...}.

Common situations: Conditionally-built config structs left nil when Snowflake env vars are missing; typed-nil values flowing through generic driver-construction helpers; copy-pasted driver setup code that skipped Config initialization.

Related errors


AI-assisted analysis of golang-migrate/migrate@01a9643f14 (2026-09-02). Data as JSON: /api/errors/1eb035bdc5c6d795. Report an issue: GitHub.