@@ -23,6 +23,7 @@ import (
23
23
"github.com/jackc/pgconn"
24
24
"github.com/jackc/pgerrcode"
25
25
_ "github.com/jackc/pgx/v4/stdlib"
26
+ "github.com/lib/pq"
26
27
)
27
28
28
29
const (
42
43
DefaultMigrationsTable = "schema_migrations"
43
44
DefaultMultiStatementMaxSize = 10 * 1 << 20 // 10 MB
44
45
DefaultLockTable = "schema_lock"
45
- DefaultLockStrategy = "advisory"
46
+ DefaultLockStrategy = LockStrategyAdvisory
46
47
)
47
48
48
49
var (
@@ -293,13 +294,19 @@ func (p *Postgres) applyTableLock() error {
293
294
if err != nil {
294
295
return & database.Error {OrigErr : err , Err : "transaction start failed" }
295
296
}
297
+ defer func () {
298
+ errRollback := tx .Rollback ()
299
+ if errRollback != nil {
300
+ err = multierror .Append (err , errRollback )
301
+ }
302
+ }()
296
303
297
304
aid , err := database .GenerateAdvisoryLockId (p .config .DatabaseName )
298
305
if err != nil {
299
306
return err
300
307
}
301
308
302
- query := "SELECT * FROM " + p .config .LockTable + " WHERE lock_id = $1"
309
+ query := "SELECT * FROM " + pq . QuoteIdentifier ( p .config .LockTable ) + " WHERE lock_id = $1"
303
310
rows , err := tx .Query (query , aid )
304
311
if err != nil {
305
312
return database.Error {OrigErr : err , Err : "failed to fetch migration lock" , Query : []byte (query )}
@@ -317,7 +324,7 @@ func (p *Postgres) applyTableLock() error {
317
324
return database .ErrLocked
318
325
}
319
326
320
- query = "INSERT INTO " + p .config .LockTable + " (lock_id) VALUES ($1)"
327
+ query = "INSERT INTO " + pq . QuoteIdentifier ( p .config .LockTable ) + " (lock_id) VALUES ($1)"
321
328
if _ , err := tx .Exec (query , aid ); err != nil {
322
329
return database.Error {OrigErr : err , Err : "failed to set migration lock" , Query : []byte (query )}
323
330
}
@@ -345,7 +352,7 @@ func (p *Postgres) releaseTableLock() error {
345
352
return err
346
353
}
347
354
348
- query := "DELETE FROM " + p .config .LockTable + " WHERE lock_id = $1"
355
+ query := "DELETE FROM " + pq . QuoteIdentifier ( p .config .LockTable ) + " WHERE lock_id = $1"
349
356
if _ , err := p .db .Exec (query , aid ); err != nil {
350
357
return database.Error {OrigErr : err , Err : "failed to release migration lock" , Query : []byte (query )}
351
358
}
@@ -598,7 +605,7 @@ func (p *Postgres) ensureLockTable() error {
598
605
return nil
599
606
}
600
607
601
- query = `CREATE TABLE " ` + p .config .LockTable + `" (lock_id BIGINT NOT NULL PRIMARY KEY)`
608
+ query = `CREATE TABLE ` + pq . QuoteIdentifier ( p .config .LockTable ) + ` (lock_id BIGINT NOT NULL PRIMARY KEY)`
602
609
if _ , err := p .db .Exec (query ); err != nil {
603
610
return & database.Error {OrigErr : err , Query : []byte (query )}
604
611
}
0 commit comments