Skip to content

Add x-no-lock option to database drivers with real distributed locks#1372

Open
gstarikov wants to merge 2 commits intogolang-migrate:masterfrom
gstarikov:add-x-no-lock-to-db-drivers
Open

Add x-no-lock option to database drivers with real distributed locks#1372
gstarikov wants to merge 2 commits intogolang-migrate:masterfrom
gstarikov:add-x-no-lock-to-db-drivers

Conversation

@gstarikov
Copy link
Copy Markdown

Add x-no-lock URL parameter to postgres, pgx, pgx/v5, sqlserver, cockroachdb, and yugabytedb drivers following the existing MySQL pattern. When set to true, Lock()/Unlock() become no-ops, allowing driver initialization and Version() calls without acquiring advisory or table-based locks.

Drivers with in-process-only atomic locks (sqlite, clickhouse, etc.) are not changed as they never block.

@coveralls
Copy link
Copy Markdown

coveralls commented Mar 18, 2026

Coverage Status

coverage: 54.969% (+0.5%) from 54.432%
when pulling 26525b5 on gstarikov:add-x-no-lock-to-db-drivers
into 2bd822b on golang-migrate:master.

Add x-no-lock URL parameter to postgres, pgx, pgx/v5, sqlserver,
cockroachdb, and yugabytedb drivers following the existing MySQL
pattern. When set to true, Lock()/Unlock() become no-ops, allowing
driver initialization and Version() calls without acquiring advisory
or table-based locks.

Drivers with in-process-only atomic locks (sqlite, clickhouse, etc.)
are not changed as they never block.
…, yugabytedb

Add param validation unit test and integration lock/unlock test
following the existing MySQL TestNoLockParamValidation/TestNoLockWorks
pattern.
@gstarikov gstarikov force-pushed the add-x-no-lock-to-db-drivers branch from 8a9d83f to 26525b5 Compare March 18, 2026 14:13
func (c *CockroachDb) Lock() error {
return database.CasRestoreOnErr(&c.isLocked, false, true, database.ErrLocked, func() (err error) {
if c.config.NoLock {
return nil
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi. Why don't we return error here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants