แนะนำ Migration
เริ่มต้นที่ Migration
Ref: https://gorm.io/docs/migration.html
มาเริ่มต้น project กัน โดย start ลง libray ก่อน (init project ใหม่)
go get -u gorm.io/gorm
go get -u gorm.io/driver/postgres
- ทำการลง gorm และลง driver postgres (เหมือนหัวข้อ SQL ก่อนหน้านี้)
ทำการสร้างไฟล์สำหรับ models.go และ main.go
- main.go
- models.go
package main
import (
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
const (
host = "localhost" // or the Docker service name if running in another container
port = 5432 // default PostgreSQL port
user = "myuser" // as defined in docker-compose.yml
password = "mypassword" // as defined in docker-compose.yml
dbname = "mydatabase" // as defined in docker-compose.yml
)
func main() {
// Configure your PostgreSQL database details here
dsn := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect to database")
}
// Migrate the schema
db.AutoMigrate(&Book{})
fmt.Println("Database migration completed!")
}
package main
import (
"gorm.io/gorm"
)
type Book struct {
gorm.Model
Name string
Author string
Description string
}
จากนั้นทำการ run
go run .
ผลลัพธ์
เพิ่ม Tracing
Ref: https://gorm.io/docs/logger.html
Note
- เพื่อให้สะดวกต่อการ debug ใน GORM เรื่อง query
- GORM ได้ทำการเพิ่ม logger มาให้เพื่อให้สะดวกต่อการ debug มากขึ้น
main.go
package main
import (
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"log"
"os"
"time"
)
const (
host = "localhost" // or the Docker service name if running in another container
port = 5432 // default PostgreSQL port
user = "myuser" // as defined in docker-compose.yml
password = "mypassword" // as defined in docker-compose.yml
dbname = "mydatabase" // as defined in docker-compose.yml
)
func main() {
// Configure your PostgreSQL database details here
dsn := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
// New logger for detailed SQL logging
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: logger.Info, // Log level
Colorful: true, // Enable color
},
)
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
Logger: newLogger, // add Logger
})
if err != nil {
panic("failed to connect to database")
}
// Migrate the schema
db.AutoMigrate(&Book{})
fmt.Println("Database migration completed!")
}
ผลลัพธ์จากการใส่ Logger (หลังจากที่ลอง run migration อีกที)