switch to mysql driver, separate pgx logic, handle no-change migration
This commit is contained in:
parent
21a9683bf1
commit
198bceb9ba
@ -151,6 +151,7 @@ func (a *App) Migrate(database embed.FS) {
|
||||
}
|
||||
if errors.Is(err, migrate.ErrNoChange) {
|
||||
slog.Info("migration has no changes")
|
||||
return
|
||||
}
|
||||
|
||||
slog.Info("migration done")
|
||||
|
||||
31
db/mysql.go
Normal file
31
db/mysql.go
Normal file
@ -0,0 +1,31 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
const maxOpenDbConn = 10
|
||||
const maxIdleDbConn = 5
|
||||
const maxDbLifetime = time.Minute * 5
|
||||
|
||||
func NewMySQL(dataSource string) (*sql.DB, error) {
|
||||
d, err := sql.Open("mysql", dataSource)
|
||||
if err != nil {
|
||||
slog.Error("error connecting to database", "error", err)
|
||||
}
|
||||
|
||||
d.SetMaxOpenConns(maxOpenDbConn)
|
||||
d.SetMaxIdleConns(maxIdleDbConn)
|
||||
d.SetConnMaxLifetime(maxDbLifetime)
|
||||
|
||||
if err := d.Ping(); err != nil {
|
||||
slog.Error("error pinging database", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return d, nil
|
||||
}
|
||||
@ -2,14 +2,11 @@ package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
_ "github.com/jackc/pgconn"
|
||||
_ "github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
_ "github.com/jackc/pgx/v5/stdlib"
|
||||
"log/slog"
|
||||
)
|
||||
|
||||
func NewPGXPool(dataSource string) *pgxpool.Pool {
|
||||
@ -27,25 +24,3 @@ func NewPGXPool(dataSource string) *pgxpool.Pool {
|
||||
slog.Info("connected to database")
|
||||
return dbPool
|
||||
}
|
||||
|
||||
const maxOpenDbConn = 10
|
||||
const maxIdleDbConn = 5
|
||||
const maxDbLifetime = time.Minute * 5
|
||||
|
||||
func NewMySQL(dataSource string) (*sql.DB, error) {
|
||||
d, err := sql.Open("mysql", dataSource)
|
||||
if err != nil {
|
||||
slog.Error("error connecting to database", "error", err)
|
||||
}
|
||||
|
||||
d.SetMaxOpenConns(maxOpenDbConn)
|
||||
d.SetMaxIdleConns(maxIdleDbConn)
|
||||
d.SetConnMaxLifetime(maxDbLifetime)
|
||||
|
||||
if err := d.Ping(); err != nil {
|
||||
slog.Error("error pinging database", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return d, nil
|
||||
}
|
||||
1
go.mod
1
go.mod
@ -3,6 +3,7 @@ module gopher-toolbox
|
||||
go 1.23.2
|
||||
|
||||
require (
|
||||
github.com/go-sql-driver/mysql v1.5.0
|
||||
github.com/golang-migrate/migrate/v4 v4.18.1
|
||||
github.com/jackc/pgconn v1.14.3
|
||||
github.com/jackc/pgx/v5 v5.7.1
|
||||
|
||||
2
go.sum
2
go.sum
@ -25,6 +25,8 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang-migrate/migrate/v4 v4.18.1 h1:JML/k+t4tpHCpQTCAD62Nu43NUFzHY4CV3uAuvHGC+Y=
|
||||
|
||||
Loading…
Reference in New Issue
Block a user